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

如何用awk去除同一字段中逗号分隔的重复条目?

解决逗号分隔字段的去重问题

你不需要先通过cut拆分文件,直接用awk就能一次性处理原文件file1,同时保留第一列并对第二列的逗号分隔内容去重:

awk -F'[ ,]' '{
    printf "%s", $1
    delete seen
    for(i=2; i<=NF; i++) {
        if(!seen[$i]++) {
            printf "%s%s", (i==2 ? " " : ","), $i
        }
    }
    print ""
}' file1

原有代码无效的原因

  • 错误地用$1作为seen数组的判断键,循环中应该用当前遍历的$i来标记重复项
  • FS变量设置方式错误:要么通过-F参数传入,要么在BEGIN块中定义;直接处理原文件时,需要把分隔符设为空格或逗号(-F'[ ,]'),这样第一列是$1,后续每个逗号分隔元素都是独立字段
  • 把FS=","写在printf语句里完全无效,FS是awk内置变量,需要在合适的作用域定义

如果一定要基于已去掉第一列的file2处理,可用以下命令:

awk -F',' '{
    delete seen
    for(i=1; i<=NF; i++) {
        if(!seen[$i]++) {
            printf "%s%s", (i==1 ? "" : ","), $i
        }
    }
    print ""
}' file2

效果验证

针对你的示例输入:

file1内容:
data1 a,b,c,d,d,d,c,e
data2 a,b,b,c

执行第一个命令后输出:

data1 a,b,c,d,e
data2 a,b,c

完全符合期望结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:31:05