1

私は次のデータを持っています(実際には〜1M行があります)

foo qux 0 x,y
bar twe 1 a,b,c
foo qux 2 x,y,z

私がやりたいのは、最初のフィールドで並べ替え、同点の場合は 3 番目のフィールドの値が最も高いものを選択することです。収量:

bar twe 1 a,b,c
foo qux 2 x,y,z

しかし、なぜこのコードが機能しないのでしょうか?

   sort -k1,1 -k2,2 -k3,3nr datafile.txt |
   awk '$3 != x {print} {x = $3}'   
   # The last awk line attempts to pick top from tie

それを行う正しい方法は何ですか?

4

2 に答える 2

4

あなたのコマンドはほぼ正しいですが、$1ではなく、を中断する必要があります$3。また、最初のフィールド、次に3番目のフィールドで並べ替える必要があるというステートメントがありますが、コードは最初、2番目、3番目のフィールドで並べ替えています。

名目上、次に、あなたは必要です:

sort -k1,1 -k3,3nr datafile.txt | awk '$1 != x { print } { x = $1 }'

1番目と2番目のフィールドを分割する(そしてそれらを並べ替える)必要がある場合は、次のようにします。

sort -k1,1 -k2,2 -k3,3nr datafile.txt |
awk '$1 != x || $2 != y { print } { x = $1; y = $2; }'
于 2013-02-12T07:10:26.120 に答える
0
sort -k1,1rn <your_file>|awk '{a[$1]=$0;}END{for(i in a)print a[i]}'
于 2013-02-12T07:25:36.320 に答える