You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用awk过滤文本文件:保留重复行中第二列最大值的条目

处理重复行并保留第二列最大值的方法

嘿,这个需求用命令行工具就能快速解决,我给你两个靠谱的方案,都是处理这类文本数据的常用操作:

方法一:用Awk直接统计最大值(推荐)

Awk是处理结构化文本的利器,我们可以遍历每一行,用第一列作为键,记录对应的最大第二列值,最后输出结果:

BEGIN {
    FS = ","          # 设置输入分隔符为逗号
    OFS = "\t"        # 设置输出分隔符为制表符
}
{
    # 清理第二列的前后空格(你的示例数据里有些值带多余空格)
    current_val = $2
    gsub(/^[[:space:]]+|[[:space:]]+$/, "", current_val)
    
    # 如果当前键没记录过,或者当前值比已记录的最大值大,就更新
    if (!($1 in max_values) || current_val > max_values[$1]) {
        max_values[$1] = current_val
    }
}
END {
    # 遍历输出所有键和对应的最大值
    for (key in max_values) {
        print key, max_values[key]
    }
}

使用方式:

  1. 将上述代码保存为keep_max.awk文件
  2. 在终端运行命令:
awk -f keep_max.awk your_input_file.txt

或者直接用一行命令执行:

awk 'BEGIN {FS=","; OFS="\t"} {val=$2; gsub(/^[[:space:]]+|[[:space:]]+$/, "", val); if (!($1 in max) || val>max[$1]) max[$1]=val} END {for(k in max) print k, max[k]}' your_input_file.txt

方法二:先排序再去重

如果数据量不大,也可以先按第一列分组、第二列降序排序,再保留每个分组的第一行(也就是最大值行):

# 先按第一列排序,同一列内按第二列降序排列
sort -t',' -k1,1 -k2,2nr your_input_file.txt | 
# 只保留每个第一列的首次出现(即最大值行)
awk -F',' '!seen[$1]++ { 
    gsub(/^[[:space:]]+|[[:space:]]+$/, "", $2)
    print $1 "\t" $2 
}'

结果示例

针对你提供的示例数据,两种方法都会输出:

NDUFAF7	0.216216
ESRRA	0.214286
HS3ST1	0.0833333

内容的提问来源于stack exchange,提问作者user7249622

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:20:24