次の文字列のリストがあります。
StringA 45
StrinB 98
StringA 35
StringA 83
StrinB 78
StringC 65
StrinB 98
重複した項目をフィルタリングして発生回数を印刷したい(サブストリングは長さが異なる場合がありますが、一方は^(文字列の始まり)、もう一方は\ tabで区切られています)。そして、見つかった最も高い数字だけを印刷したいと思います。つまり、出力を次のように表示したいと思います(文字列、発生項目、およびスコアが異なる順序で表示されることもあります)。
3 83 StringA
3 98 StrinB
1 65 StringC
sort
同じイベントを並べ替え、重複した項目を削除するために、およびの組み合わせを使用できることを知っていますが、uniq
他の「スコア」は考慮されません。スコアを無視しながら並べ替え、次に最も高いスコアを追跡しながら重複するアイテムをフィルタリングする方法を知りたいです。
ベストアンサー1
これは直接行うことができますawk
。
awk '{ max[$1]=( max[$1]>$2?max[$1]:$2 ); seen[$1]++ }
END{ for (x in seen) print seen[x], max[x], x }' infile
3 98 StrinB
3 83 StringA
1 65 StringC