You need to enable JavaScript to run this app. 如何使用awk提取前4列相同分组的第5列最小值并保留唯一组合行
优惠活动
大模型
产品
解决方案
定价
更多

如何使用awk提取前4列相同分组的第5列最小值并保留唯一组合行

CSV分组取最小值行awk实现方案

可直接运行的代码

基础版(输出顺序不保证和分组首次出现顺序一致)

awk '
BEGIN {
    FS = ","
    OFS = ","
}
{
    key = $1 FS $2 FS $3 FS $4
    if (!(key in min_val) || $5 < min_val[key]) {
        min_val[key] = $5
        result[key] = $0
    }
}
END {
    for (key in result) {
        print result[key]
    }
}
' 你的输入文件路径.csv

保序版(输出顺序和分组首次出现顺序完全匹配,适配示例期望输出)

awk '
BEGIN {
    FS = ","
    OFS = ","
}
{
    key = $1 FS $2 FS $3 FS $4
    # 首次遇到该分组时记录出现顺序
    if (!(key in min_val)) {
        order[++count] = key
        min_val[key] = $5
        result[key] = $0
    } 
    # 非首次遇到时仅当第5列更小才更新记录
    else if ($5 < min_val[key]) {
        min_val[key] = $5
        result[key] = $0
    }
}
END {
    # 按分组首次出现顺序输出结果
    for (i=1; i<=count; i++) {
        print result[order[i]]
    }
}
' 你的输入文件路径.csv

实现原理说明

  • 分隔符配置:BEGIN块中提前指定输入(FS)和输出(OFS)分隔符为逗号,无需额外处理CSV的字段拆分。
  • 分组规则实现:将每行前4列拼接为唯一分组键,相同前4列的行会被归类到同一分组下。
  • 最小值筛选逻辑:
    • 首次遇到某分组时,直接保存当前行的第5列为分组最小值,同时保存整行内容
    • 重复遇到同分组时,仅对比第5列数值,若当前行数值更小则更新分组最小值和对应的行记录
    • 前4列唯一的分组只会被处理一次,会被直接保留,符合需求要求
  • 结果输出:保序版额外通过数组记录分组首次出现的顺序,最终按该顺序输出结果,和示例期望的输出顺序完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 23:24:03