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

针对CSV中重复的Column1值,保留Column3、Column4最长值

处理重复Column1的CSV数据:保留最长Column3/Column4值

需求说明

针对存在重复值的CSV文件,需按以下规则处理:

  • 以**HEADER1(Column1)**为分组依据
  • 对每个分组,保留长度最长的HEADER3(Column3)和HEADER4(Column4)取值
  • HEADER2(Column2)需与对应HEADER1保持一致(示例中同一HEADER1的HEADER2值相同)

原始CSV数据

HEADER1,HEADER2,HEADER3,HEADER4
ap3,799,226:::5731,address 1
afk,731,+636:::773:992,address 2
ppd,411,8542,address 6
ap3,799,226,address 1:::address 9
ap3,799,474:::226:::5731,address 1
ppd,411,774:::+8825-22,address 6

现有错误脚本及输出

错误AWK脚本

$ awk -F',' -v OFS=',' '
    FNR==1 { print; next } {
    a[$0]=length($3)
}
END {
    for (i in a)
    print i,a[i]
}' input.csv

错误输出

HEADER1,HEADER2,HEADER3,HEADER4
,14,731,+636:::773:992,address 2
,16,799,474:::226:::5731,address 1
,10,799,226:::5731,address 1
,33,799,226,address 1:::address 9
,4d,411,8542,address 6
,14,411,774:::+8825-22,address 6

错误原因:脚本逻辑完全偏离需求——用整行作为数组键,还错误追加了长度值,导致输出格式混乱,根本没实现分组保留最长值的逻辑。

正确解决方案

正确AWK脚本

awk -F',' -v OFS=',' '
    FNR == 1 { print; next }
    {
        key = $1
        # 更新最长Column3
        if (! (key in col3_len) || length($3) > col3_len[key]) {
            col3_len[key] = length($3)
            col3_val[key] = $3
        }
        # 更新最长Column4
        if (! (key in col4_len) || length($4) > col4_len[key]) {
            col4_len[key] = length($4)
            col4_val[key] = $4
        }
        # 保留Column2(同一key的Column2值默认一致,取首次即可)
        if (! (key in col2_val)) {
            col2_val[key] = $2
        }
    }
    END {
        for (key in col2_val) {
            print key, col2_val[key], col3_val[key], col4_val[key]
        }
    }
' input.csv

脚本逻辑说明

  1. 首行直接输出表头,不参与处理
  2. 用$1(Column1)作为分组唯一键,维护三个关联数组:
    • col2_val:存储每个分组对应的Column2值
    • col3_val/col3_len:跟踪每个分组中长度最长的Column3值及其长度
    • col4_val/col4_len:跟踪每个分组中长度最长的Column4值及其长度
  3. 遍历每行时,对比当前Column3/Column4的长度与已存储的最长值,更长则更新
  4. 最后遍历所有分组键,按CSV格式输出合并后的结果

期望输出

HEADER1,HEADER2,HEADER3,HEADER4
afk,731,+636:::773:992,address 2
ap3,799,474:::226:::5731,address 1:::address 9
ppd,411,774:::+8825-22,address 6

内容的提问来源于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:42:27