さまざまなフィールドと値に基づいてソート

さまざまなフィールドと値に基づいてソート

私は次のデータを持っています:

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

おすすめ記事