Text-Processing
如何根據第一列作為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
知道怎麼做嗎?
一種方法是按升序排序,然後記下每個 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
我們處理文件兩次:一次是為了找到每個鍵的最小值,然後輸出具有該最小值的行。