私は次のデータを持っています:
AD12 Ar.1 352
AD12 Ar.7 495
AD12 Ar.8 491
AD12 Ar.6 495
AD12 Ar.5 495
AD12 Ar.9 491
AD13 Ar2.1 495
最初の列の一意のIDに対して、3番目の列に基づいて最も高い値を持つ行を選択したいのですが、最初の列の各IDに対して最も高い値を持つ重複項目を維持したいと思います。たとえば、次のようになります。
AD12 Ar.7 495
AD12 Ar.6 495
AD12 Ar.5 495
AD13 Ar2.1 495
何をすべきかわかりません。 sort -r -k3,3 -k1,1 などの他のソートコマンドを試しましたが、うまくいきませんでした。どんな提案がありますか?
答え1
sort
+awk
解決策:
sort -k1,1 -k3,3nr <file | awk '!a[$1]{ a[$1]=$3 }$3==a[$1]'
sort -k1,1 -k3,3nr
- 最初のフィールド(通常の並べ替え)と3番目のフィールド(数値逆順)に基づいて行を並べ替えます。!a[$1]{ a[$1]=$3 }$3==a[$1]
- 各固有についてID$1
現在のレコードの最大値が等しいことを確認する$3
出力:
AD12 Ar.5 495
AD12 Ar.6 495
AD12 Ar.7 495
AD13 Ar2.1 495