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

如何基于Column1去重并结合Column3的条件处理CSV文件

处理大型CSV文件:按指定条件去重并清理数据

需求说明

需基于CSV文件的H1列(Column1)去除重复记录,同时满足以下条件:

  • H3列(Column3)可为空,或包含多个用:::分隔的值;
  • 若H1存在重复值,保留H3中元素数量最多的那条记录;
  • 移除H3列数字间的-符号。

输入示例

H1,H2,H3,H4
a,2,8005:::+2287:::3426,2
b,4,1111:::+15-00:::01354,1
b,4,1111:::+1500,1
c,4,2208:::+6583,9
d,5,7761:::+993733:::+53426,4
d,5,7761:::+993-733:::+53-426:::87425,4
d,5,7761:::53-426,4

期望输出

H1,H2,H3,H4
a,2,8005:::+2287:::3426,2
b,4,1111:::+1500:::01354,1
c,4,2208:::+6583,9
d,5,7761:::+993733:::+53426:::87425,4

当前脚本局限

现有脚本仅能完成基础去重和H3列的-符号清理,无法判断并保留H3元素数量最多的记录:

awk -F, '{ gsub(/-/,"", $3); print } ' input.csv > input_without_hyphen.csv
awk -F',' -v OFS=',' '!a[$1]++' input_without_hyphen.csv > output.csv

解决方案

使用单遍扫描的awk脚本,整合所有逻辑,适合处理大型CSV文件:

awk -F',' -v OFS=',' '
NR == 1 { print; next }
{
    # 清理H3列中的-符号
    cleaned_h3 = $3
    gsub(/-/, "", cleaned_h3)
    
    # 计算当前H3的元素数量
    split(cleaned_h3, elements, /:::/)
    elem_count = length(elements)
    
    # 保留H1对应元素数最多的记录
    if (!($1 in max_elem) || elem_count > max_elem[$1]) {
        max_elem[$1] = elem_count
        saved_records[$1] = $1 OFS $2 OFS cleaned_h3 OFS $4
    }
}
END {
    # 输出所有保留的记录
    for (key in saved_records) {
        print saved_records[key]
    }
}' input.csv > output.csv

脚本逻辑说明

  • 表头处理:NR == 1 { print; next }直接输出表头,跳过后续处理
  • 清理H3列:用gsub移除cleaned_h3变量中的所有-符号
  • 统计元素数量:通过split按:::分割清理后的H3内容,用length(elements)获取元素总数
  • 记录留存判断:用两个关联数组max_elem存储每个H1对应的最大元素数,saved_records存储对应记录。若当前记录的元素数更大,则更新存储的记录
  • 最终输出:在END块遍历输出所有留存的记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 18:23:10