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)
知道如何做到这一点吗?
一种方法是按升序排序,然后记下每个 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)
这应该以科学记数法处理数字:
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)
我们处理文件两次:一次是找到每个键的最小值,然后输出具有该最小值的行。
| 归档时间: |
|
| 查看次数: |
2139 次 |
| 最近记录: |