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

求助:如何用AWK按col1和col2分组获取col3的去重值

修正代码实现按前两列分组并去重第三列合并

问题分析

原代码的核心问题有两个:

  • 仅以第一列$1作为分组键,未将前两列的组合作为分组依据(逻辑上应该用col1+col2组合键来匹配需求)
  • 缺少第三列的去重逻辑,导致重复值被多次累加拼接

修正后的代码

awk -F',' '
{
    # 用前两列的组合作为分组唯一标识
    group_key = $1 "," $2
    # 二维数组记录当前分组下已出现的第三列值,实现去重
    if (!($3 in seen[group_key])) {
        seen[group_key][$3] = 1
        # 拼接去重后的第三列内容
        if (group_key in result) {
            result[group_key] = result[group_key] "," $3
        } else {
            result[group_key] = $3
        }
    }
}
END {
    # 按期望格式输出所有分组结果
    for (key in result) {
        printf "%s,\"%s\"\n", key, result[key]
    }
}' file.txt

代码逻辑说明

  1. 分组键设计:通过group_key = $1 "," $2将前两列的组合作为唯一分组标识,确保同一col1+col2组合的行被归为一组
  2. 去重控制:使用二维数组seen[group_key][$3]记录每个分组下已出现的第三列值,仅当值未出现过时才加入结果
  3. 结果拼接:对每个分组逐步拼接去重后的第三列内容
  4. 格式输出:遍历所有分组结果,用引号包裹拼接后的第三列,完全匹配期望输出格式

测试验证

用你提供的示例数据运行上述代码,会输出:

City,Sunset,"Anna,Ben"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:35:33