Unix系统下如何删除CSV文件列内部嵌入的多余换行符
Unix系统删除CSV字段内嵌入换行的解决方案
固定字段数场景通用方案(无需额外安装工具)
你给出的示例中每条有效CSV记录固定为6个字段,对应5个英文逗号分隔符,通过累计逗号计数判断记录是否读取完整,可完全规避之前按「数字+逗号」判断行首的逻辑缺陷:
awk -F, '{ buffer = buffer $0 count += NF - 1 if (count == 5) { print buffer buffer = "" count = 0 } }' test.csv > test_new.csv
执行后输出的test_new.csv完全匹配你给出的期望结果。
如果你实际的CSV字段数不是6个,把代码里的
count == 5改成你实际的「字段数-1」即可。
带引号包裹字段的复杂CSV场景
如果你的CSV存在双引号包裹的字段(字段内部包含逗号/特殊字符),推荐使用专门的CSV处理工具csvkit处理:
- 安装csvkit:
- Debian/Ubuntu系:
sudo apt install csvkit - CentOS/RHEL系:
sudo yum install python3-csvkit - macOS:
brew install csvkit
- 执行转换命令:
csvformat -M $'\n' test.csv > test_new.csv
工具会自动识别CSV字段边界,合并字段内部的嵌入换行。
内容的提问来源于stack exchange,提问作者Eja
相关产品推荐
相关产品推荐

