部分文字列の発生回数を計算し、最高スコアを維持します。

部分文字列の発生回数を計算し、最高スコアを維持します。

次の文字列のリストがあります。

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

おすすめ記事