在Bash中解析含异常字符与格式问题的大型CSV文件
修复畸形CSV的Bash命令优化方案
针对1.5GB带错误换行的畸形CSV文件,优化后的Bash命令可以解决原命令的三个问题,同时高效处理大文件:
awk ' /^"\[\[/{ found=1 line=$0 next } found{ line=line $0 if (/]]"$/) { gsub(/[[:space:]]+/, " ", line) gsub(/"\[\[ /, "\"[[") gsub(/ ]]"/, "]]\"") gsub(/ /, ",", line) print line found=0 } }' Malformed_csv_Abridged.csv
解决的核心问题
- 处理所有数据实例:移除原命令中的
exit,改为匹配到]]"后重置found标记,遍历文件处理所有"[[...]]"块。 - 避免无关空格转逗号:仅对
"[[...]]"内部的内容进行处理,块外的空格不会被修改,杜绝不必要的逗号插入。 - 消除括号旁多余逗号:通过专门的替换规则,先移除
[[后和]]前的空格,再将其余空格替换为逗号,彻底解决括号旁的冗余逗号问题。
命令逻辑拆解
- 匹配起始行:当行以
"[[开头时,标记开始处理并初始化内容行。 - 拼接错误换行:将后续行持续拼接到当前内容行,消除错误换行导致的内容拆分。
- 处理完整块:当行以
]]"结尾时,完成当前块的处理:- 压缩所有连续空白为单个空格;
- 清理
[[和]]旁的空格; - 将剩余空格替换为CSV分隔符逗号;
- 输出处理后的完整CSV行,重置标记准备下一个块。
内容的提问来源于stack exchange,提问作者TDeramus
相关产品推荐
相关产品推荐

