?如何根据第一列作为ID选择每组中具有最小值的行?

Ann*_*364 5 awk python perl text-processing

我有一个文件看起来像这样:

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   
Run Code Online (Sandbox Code Playgroud)

对于第一列中的每个值,我想选择在第二列中具有最小值的“所有行”并按第一列分组。所以所需的输出是:

 1   7.8e-12  
 1   7.8e-12
 2   9.3e-13
 3   3.0e-11    
 3   3.0e-11 
Run Code Online (Sandbox Code Playgroud)

知道如何做到这一点吗?

ste*_*ver 7

一种方法是按升序排序,然后记下每个 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
Run Code Online (Sandbox Code Playgroud)


gle*_*man 5

这应该以科学记数法处理数字:

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

我们处理文件两次:一次是找到每个键的最小值,然后输出具有该最小值的行。