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第一行的
- 同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
相关产品推荐
相关产品推荐

