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

如何删除CSV文件中指定列组合存在重复值的行

处理CSV中指定列组合重复的行

输入数据

Field1;Field2;Field3;Field4;Field5
alpha;15;16;delta;delta
alpha;15;15;delta;kappa
alpha;15;15;delta;delta
alpha;15;16;delta;kappa

需求说明

需要删除所有满足以下任一条件的行:

  • Field2+Field3的列组合在文件中重复出现
  • Field4+Field5的列组合在文件中重复出现
    最终只保留两个列组合都唯一的行。

解决方案(使用awk)

通过两次遍历CSV文件实现:第一次统计两个列组合的出现次数,第二次筛选出两个组合出现次数均为1的行。

脚本方式

创建一个filter.awk文件,内容如下:

BEGIN { FS = OFS = ";" }
# 第一次遍历统计次数
NR == FNR {
    # 生成两个组合的键
    key_pair1 = $2 FS $3
    key_pair2 = $4 FS $5
    # 计数
    count_pair1[key_pair1]++
    count_pair2[key_pair2]++
    next
}
# 第二次遍历筛选符合条件的行
count_pair1[$2 FS $3] == 1 && count_pair2[$4 FS $5] == 1

运行命令:

awk -f filter.awk your_file.csv your_file.csv

单行命令方式

直接在终端执行:

awk 'BEGIN{FS=OFS=";"} NR==FNR{k1=$2FS$3;k2=$4FS$5;c1[k1]++;c2[k2]++;next} c1[$2FS$3]==1 && c2[$4FS$5]==1' your_file.csv your_file.csv

输出结果

Field1;Field2;Field3;Field4;Field5
alpha;15;16;delta;kappa

代码说明

  • FS = OFS = ";":设置输入和输出的分隔符为分号,适配目标CSV格式
  • 第一次遍历(NR == FNR):仅统计两个列组合的出现次数,存入关联数组count_pair1和count_pair2
  • 第二次遍历:只输出两个组合出现次数都为1的行,确保这两个组合在整个文件中唯一

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:45:30