解決できないような問題があります。
次のようなタブで区切られた巨大なテキストファイルがあります。
chr 10 20 20 a
chr 30 40 10 b
chr 30 40 15 b
chr 30 40 11 b
必要なものは次のとおりです。 1)すべての一意の行を抽出する2)列5が複数回表示される場合(例:b)、列4に最大値がある行。
したがって、上記の例で必要な行は次のようになります。
10月20日20日(これはユニークな行です) 30 40 15b(5列が複数回表現される場合、4列で値が最大の行になります。
これを行う簡単な方法はありますか?
ベストアンサー1
それでは、行を5番目の列にグループ化し、各グループに最大4番目の列を持つ行を印刷しますか?
負の数がないと仮定すると、次のようになります。
$ awk '$4 > val[$5] {val[$5] = $4; line[$5] = $0}
END {for (x in line) print line[x] }' < foo.txt
chr 10 20 20 a
chr 30 40 15 b