一致するIDを持つ列の最大値

一致するIDを持つ列の最大値

次のフィールドを含むファイルがあります。

NM001 rp1 210
NM003 rp1 220
NM005 rag 200
NM004 rag 100

列 2 の各変更について、列 4 で最大値を探し、その列 1 も報告する出力を得たいと思います。これまで、列2と3は報告していますが、列1の数字が異なるため、列1は報告しない解決策を見つけました。私はawkを使うのが好きです。

出力は

NM003 rp1 220
NM005 rag 200

ベストアンサー1

awkを使うと簡単です。

2番目の列の各値の最大値を追跡する必要があり、各行全体を最大値に保ちたいとします。

awk '
    $3 > maxvals[$2] {lines[$2]=$0; maxvals[$2]=$3}
    END { for (tag in lines) print lines[tag] }
'

出力はソートされていないため、特定のsort順序が必要な場合は入力をパイプします。

おすすめ記事