1

次の形式の行を含むテキスト ファイルがあります。

26 20 18 19 43 93 
3 16 6 7 47 1 
19 9 14 37 22 0 
25 27 14 10 62 29 
19 6 10 27 33 5 
24 14 15 20 21 6 
10 17 15 8 47 31 

Linux で 'sort' を使用して、任意の 2 つの列の違い (列 3 と 4 の違いなど) に基づいてファイルを並べ替える方法はありますか?

特定の列に基づいてソートできることは知っています。たとえば、

sort -r -k 3n data.csv

しかし、違いに基づいてソートできるかどうかはわかりません。

他の Linux コマンドも大歓迎です。Perl や Python などのスクリプト言語は、このタスクを簡単に実行できますが、Linux コマンドに興味があります。

編集:違いとは、数値の違いを意味し、記号があります。たとえば、Column3-Column4 に基づいて並べ替えるには、-1、-1、-23、4、-17、... で並べ替えるという意味です。

4

2 に答える 2

3

「差」とは、絶対値を意味していたと思いますabs()。これを行うことができます:

 awk '{d=$3-$4;$0=(d>0?d:-d) "#"$0}7' file|sort -n|sed 's/^.*#//'

それは出力します:

26 20 18 19 43 93
3 16 6 7 47 1
25 27 14 10 62 29
24 14 15 20 21 6
10 17 15 8 47 31
19 6 10 27 33 5
19 9 14 37 22 0
于 2013-10-17T20:47:47.720 に答える
2

sort私の知る限り、標準コマンドはフィールドの式を実行しません。しかし、シュワルツ変換の一種のシェル バージョンを実行できます。

awk '{print $3-$4,$0}' | 
sort -n -k1,1 | 
sed 's/^[^ ]* //'
于 2013-10-17T20:44:16.653 に答える