Text-Processing

‌如何根據第一列作為ID在每組中選擇具有最小值的行?

  • February 1, 2018

我有一個文件看起來像這樣:

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 

知道怎麼做嗎?

一種方法是按升序排序,然後記下每個 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

這應該以科學計數法處理數字:

awk '
   NR == FNR {
       if (!($1 in min) || $2 < min[$1])
           min[$1] = $2
       next
   }
   $2 == min[$1]
' file file

我們處理文件兩次:一次是為了找到每個鍵的最小值,然後輸出具有該最小值的行。

引用自:https://unix.stackexchange.com/questions/421283