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

使用Unix脚本移除CSV文件双引号内的换行符(LF/ )

嘿,我来帮你搞定CSV文件里双引号内部换行符的问题!针对你需要移除双引号内所有LF换行的需求,我给你准备了一个用awk写的可靠脚本,它能精准识别引号内的内容,不会误删引号外的换行。


脚本实现

你可以把下面的代码存成clean_quote_newlines.awk文件:

BEGIN {
    FS = ""  # 把每个字符单独作为字段处理
    in_quote = 0  # 标记是否处于双引号内部
}
{
    # 逐个字符遍历处理
    for (i=1; i<=NF; i++) {
        # 遇到双引号就切换引号内状态
        if ($i == "\"") {
            in_quote = !in_quote
        }
        # 如果在引号内且是换行符,替换成空格(也可以直接删掉)
        if (in_quote && ($i == "\n" || $i == "\r")) {
            printf " "
        } else {
            printf "%s", $i
        }
    }
}

怎么用?

直接在终端运行命令就行:

awk -f clean_quote_newlines.awk 你的输入文件.csv > 处理后的输出文件.csv

嫌存文件麻烦的话,也可以用一行命令搞定:

awk 'BEGIN{FS=""; in_quote=0} {for(i=1;i<=NF;i++){if($i=="\"") in_quote=!in_quote; if(in_quote && ($i=="\n"||$i=="\r")) printf " "; else printf "%s",$i}}' input.csv > output.csv

为啥这个脚本靠谱?

  • 它会逐个检查每个字符,精准判断当前是否在双引号里,不会把引号外的换行给改了
  • 不仅处理LF(\n),还能处理CR(\r),覆盖常见的换行格式
  • 如果你不想把换行换成空格,而是直接删掉,只要把脚本里的printf " "改成printf ""就行

测试一下你的示例

输入(带内部换行的CSV):

No,Status,Date
1,"Success
Error",1/15/2018
2,"Success
Error
NA",2/15/2018
3,"Success
Error",3/15/2018

处理后的输出:

No,Status,Date
1,"Success Error",1/15/2018
2,"Success Error NA",2/15/2018
3,"Success Error",3/15/2018

完全符合你的预期哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:33:19