求助:如何用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
代码逻辑说明
- 分组键设计:通过
group_key = $1 "," $2将前两列的组合作为唯一分组标识,确保同一col1+col2组合的行被归为一组 - 去重控制:使用二维数组
seen[group_key][$3]记录每个分组下已出现的第三列值,仅当值未出现过时才加入结果 - 结果拼接:对每个分组逐步拼接去重后的第三列内容
- 格式输出:遍历所有分组结果,用引号包裹拼接后的第三列,完全匹配期望输出格式
测试验证
用你提供的示例数据运行上述代码,会输出:
City,Sunset,"Anna,Ben"
内容的提问来源于stack exchange,提问作者Kisses
相关产品推荐
相关产品推荐

