次のフィールドを含むファイルがあります。
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
順序が必要な場合は入力をパイプします。
答え2
sort
次のツールを試してくださいuniq
。
sort -k3,3nr infile |
awk '{ print $1" " $3" " $2 }' |
uniq -f2 | awk '{ print $1" " $3" " $2 }' > outfile