‌最初の列をIDに基づいて各グループの最小値を持つ行を選択する方法は?

‌最初の列をIDに基づいて各グループの最小値を持つ行を選択する方法は?

次のファイルがあります。

1   7.8e-12  
1   7.8e-12  
1   1.0e-11   
2   9.3e-13    
2   3.5e-12 
2   3.5e-10
2   3.1e-9         
3   3.0e-11    
3   3.0e-11     
3   1.7e-08   

最初の列の各値について、2番目の列の最小値を持つ「すべての行」を選択し、最初の列に基づいてグループ化したいと思います。したがって、希望の出力は次のようになります。

 1   7.8e-12  
 1   7.8e-12
 2   9.3e-13
 3   3.0e-11    
 3   3.0e-11 

これを行う方法を知っていますか?

ベストアンサー1

1つの方法は、昇順にソートしてから、各col1の最初のcol2値を記録し、現在のcol2値が等しいかどうかを印刷することです。

sort -k1,1n -k2,2g file | awk '!a[$1] {a[$1] = $2} $2 == a[$1]'
1   7.8e-12
1   7.8e-12
2   9.3e-13
3   3.0e-11
3   3.0e-11

おすすめ記事