gpt4 book ai didi

awk - 使用 awk 过滤文本文件中的值

转载 作者:行者123 更新时间:2023-12-02 01:02:41 33 4
gpt4 key购买 nike

我有一个像这个例子的文件:

NDUFAF7,0.216216,
ESRRA,0.0178571,
HS3ST1,0.027027,
HS3ST1,0,
HS3ST1,0.0833333,
ESRRA,0.214286,
NDUFAF7,0.0824742,
ESRRA,0.0810811,
NDUFAF7,0,

其中有 2 个 逗号分隔 列。在第一列中,有些行是重复的。我想根据 2nd column 中的值只保留每个重复行中的一个。事实上,我想保留第二行中具有最大值(value)的那个。上面示例的输出将是(制表符分隔):

NDUFAF7 0.216216
HS3ST1 0.0833333
ESRRA 0.214286

我在 awk 中尝试了以下代码,但没有返回我想要的。

awk -F "," '{ if($2 >= $2) { print }}' file_name

你知道怎么解决吗?

最佳答案

第 1 种解决方案:遵循 awk 可能会对您有所帮助。它不会按照 Input_file 的相同顺序首先给出字段的顺序。

awk -F"," '{a[$1]=a[$1]>$(NF-1)?a[$1]:$(NF-1)} END{for(i in a){print i,a[i]}}' Input_file

或者这里也是上述解决方案的一种非线性形式。

awk -F"," '
{
a[$1]=a[$1]>$(NF-1)?a[$1]:$(NF-1)
}
END{
for(i in a){ print i,a[i] }
}
' Input_file

解决方案 2: 如果您需要与 Input_file 相同的第一个字段序列,那么以下内容可能对您有所帮助。

awk -F"," '!b[$1]++{c[++i]=$1} {a[$1]=a[$1]>$(NF-1)?a[$1]:$(NF-1)} END{for(j=1;j<=i;j++){print c[j],a[c[j]]}}'  Input_file

或者现在也添加非单线性形式的解决方案。

awk -F"," '
!b[$1]++{ c[++i]=$1 }
{
a[$1]=a[$1]>$(NF-1)?a[$1]:$(NF-1)
}
END{
for(j=1;j<=i;j++){
print c[j],a[c[j]]}
}
' Input_file

编辑:

awk -F"," '!b[$1]++{c[++i]=$1} {a[$1]=a[$1]>$(NF-1)?a[$1]:$(NF-1)} END{for(j=1;j<=i;j++){print c[j],a[c[j]]}}' Input_file
NDUFAF7 0.216216
ESRRA 0.214286
HS3ST1 0.0833333

关于awk - 使用 awk 过滤文本文件中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49505746/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com