特定のIDの最大値による行のフィルタリング

特定のIDの最大値による行のフィルタリング

最初の列にIDがあり、2番目の列に数値を持つテーブルファイルがあります。各IDのスコアが最も高い行のみを含むファイルを生成する必要があります。

だから私はこれを取りたいと思います:

ES.001      2.33
ES.001      1.39
ES.001    119.55
ES.001     14.55
ES.073      0.35
ES.073     17.95
ES.140      1.14
ES.140     53.88
ES.140     18.28
ES.178    150.27

そしてこれを生成します:

ES.001    119.55
ES.073     17.95
ES.140     53.88
ES.178    150.27

Bashコマンドラインでこれを行う方法はありますか?

答え1

sort数値の降順で最初のフィールドでソートし、2番目のフィールドでソートするために使用されます。各固有の最初のフィールド値の最初の行のみを印刷するには、Awkを使用します。

sort -k1,1 -k2rn inputfile | awk '!a[$1]++'

答え2

データ型によっては、ソートに時間がかかることがあります。次のようにソートせずに(より多くのメモリを使用して)結果を取得します。

awk 'a[$1]<$2{a[$1]=$2}END{for(i in a){print(i,a[i])}}' infile

関連情報