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

CSV文件预处理问题:移除引号竖线及补全缺失引号

竖线分隔CSV文件的预处理解决方案

问题背景

解析以**竖线(|)**为列分隔符、**双引号(")**标记长字符串列的CSV文件时,需要编写预处理脚本完成以下操作:

  • 移除字符串中多余的竖线和双引号
  • 补全示例中缺失的双引号

示例输入

sample 1|Pending|"XXX LPA. LTD. - GridBird TEST (Monthly) (Collage Maker | Photo Editor)"|749|...
sample 2|Pending|"Take Five Entertainment" Limited Liability Partnership - Pack with cats "Halloween" (Cat Simulator: My Pets)|...

期望输出

sample 1|Pending|"XXX LPA. LTD. - GridBird TEST (Monthly) (Collage Maker Photo Editor)"|749|...
sample 2|Pending|"Take Five Entertainment Limited Liability Partnership - Pack with cats Halloween (Cat Simulator: My Pets)"|749|...

尝试过的方法

曾尝试用正则表达式识别目标模式,结合sed进行替换,但因对sed运行机制不熟悉,无法仅替换目标字符(竖线或双引号)。使用的正则表达式如下:

^.*\|\".*(\||\").*(\"\|\d|\|\d)

该正则用于匹配|"与("|数字或|数字)之间的字符串,但后续无法用sed完成替换操作。

最终解决方案(感谢@Ed Morton)

以下是基于样本得到的awk预处理脚本,注释已翻译为中文:

{
    # 将大括号替换为空格
    gsub(/\{/, " ");
    gsub(/\}/, " ");

    # 第一步:按双引号分割记录,把引号内字段中的竖线(及周围空格)替换为空格
    FS=OFS="\""; $0=$0
    for ( i=2; i<=NF; i+=2 ) {
        gsub(/[[:space:]][|][[:space:]]*/, " ", $i)
    }

    # 处理引号内字段中直接连接在字符间的竖线,替换为空格
    FS=OFS="\""; $0=$0
    for ( i=2; i<=NF; i+=2 ) {
        if ($i ~ /[#\-\+\?A-Za-z][|][#\-\+\?A-Za-z]*/) {
            sub(/[|]{1}/, " ", $i)  
        }
    }

    # 第二步:按竖线分割记录,移除字段内所有双引号
    FS=OFS="|"; $0=$0;
    for ( i=1; i<=NF; i++ ) {
        gsub(/"/, "", $i);
    }

    print
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 11:36:12