使用awk基于两列自定义规则(互换列值算重复)实现CSV去重
双列分号分隔CSV互换重复行清理方案
实现逻辑
- 定义行唯一判定键:将每行的两个字段按字典序排序后拼接为统一key,互为互换关系的两行会生成完全相同的key
- 两次读取输入文件:第一次统计每个key的出现次数,第二次仅输出对应key出现次数为1的行,即可把所有存在互换重复的行全部移除
完整awk实现代码
BEGIN { # 定义字段分隔符为分号 FS = ";" } # 第一次读取文件,统计每个key的出现次数 NR == FNR { key = $1 < $2 ? $1 "|" $2 : $2 "|" $1 count[key]++ next } # 第二次读取文件,仅输出无重复的行 { key = $1 < $2 ? $1 "|" $2 : $2 "|" $1 if (count[key] == 1) { print $0 } }
运行命令
将代码保存为dedup.awk后执行:
awk -f dedup.awk your_file.csv your_file.csv
示例运行效果
针对你提供的输入文件,运行后输出结果为:
b;c x;y
可选调整:保留每组互换行的第一条
如果需求是去重后保留每组互换行的第一条而非全部移除,只需将第二次遍历的判断逻辑修改为:
{ key = $1 < $2 ? $1 "|" $2 : $2 "|" $1 if (count[key]-- > 0) { print $0 } }
调整后输出结果为:
a;b b;c c;d x;y
内容的提问来源于stack exchange,提问作者abderrahim_05
相关产品推荐
相关产品推荐

