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

CSV数据转换需求:按keyn与assert规则追加列并删除行

处理CSV文件的特定行合并与追加规则

可行的Awk解决方案

BEGIN { FS = OFS = "," }
keyn_prev = ""
has_processed_first = 0
need_append_code = 0
prev_line = ""

{
    if (need_append_code) {
        print prev_line "," $3
        need_append_code = 0
        has_processed_first = 1
        next
    }

    if ($1 != keyn_prev) {
        keyn_prev = $1
        has_processed_first = 0
        if ($2 == "\"1\"") {
            prev_line = $0
            need_append_code = 1
            next
        } else {
            print $0 ",\"0\""
            has_processed_first = 1
        }
    } else {
        print $0 ",\"0\""
    }
}

END {
    if (need_append_code) {
        print prev_line ",\"0\""
    }
}

代码逻辑解释

  • 分隔符配置:开头指定CSV的输入/输出分隔符为逗号,保证列处理的正确性。
  • 状态跟踪变量:
    • keyn_prev:记录上一行的keyn值,用于判断是否进入新的keyn分组。
    • has_processed_first:标记当前keyn的第一行是否已处理完成。
    • need_append_code:标记是否需要读取下一行的code值来追加到当前行。
    • prev_line:暂存需要追加code的keyn第一行内容。
  • 新keyn分组处理:
    • 若当前keyn第一行的assert为"1",暂存该行并标记需要读取下一行的code,跳过当前输出。
    • 若assert为"0",直接追加"0"后输出,并标记第一行已处理。
  • 同keyn后续行处理:无论第一行的assert值是什么,后续行统一追加"0"输出。
  • 文件末尾兜底:如果最后一行是需要追加code的keyn第一行但无后续行,直接追加"0"输出避免遗漏。

输入输出示例

输入CSV

"key1","1","code1"
"key1","0","code2"
"key1","1","code3"
"key2","0","code4"
"key2","1","code5"
"key3","1","code6"
"key3","0","code7"

输出CSV

"key1","1","code1","code2"
"key1","1","code3","0"
"key2","0","code4","0"
"key2","1","code5","0"
"key3","1","code6","code7"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 12:27:35