如何用Bash处理CSV文件并移除指定列中的CR LF
处理文件第6列中的换行符问题
针对你遇到的供应商文件问题——仅少数行的第6列包含CR/LF,全局替换会破坏正常记录末尾的换行——可以用awk高效处理,兼顾大文件性能和精准修改:
awk -F'~' -v OFS='~' ' { buffer = buffer $0 if ($0 ~ /~$/) { n = split(buffer, fields, /~/) gsub(/\r?\n/, " ", fields[6]) for (i=1; i<=n; i++) { printf "%s%s", fields[i], (i==n ? "\n" : OFS) } buffer = "" } }' 待处理文件.txt > 处理后文件.txt
工作原理
- 累积不完整记录:问题行因第6列含换行被拆成多行,脚本用
buffer累积内容,直到遇到以~结尾的行(正常记录的结束标志)。 - 精准修改第6列:把累积的完整记录按
~分割为字段数组,专门将第6字段里的\r\n或\n替换成空格。 - 输出完整记录:重新拼接所有字段,保留原分隔符和记录末尾的换行,确保输出格式与原文件一致。
优势
- 效率高:awk处理百万级行毫无压力,无需冗余遍历判断。
- 精准安全:只修改第6列内部的换行,完全不影响记录末尾的正常CR/LF。
内容的提问来源于stack exchange,提问作者Kasey
相关产品推荐
相关产品推荐

