最初の列に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