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

关于修正Bash转CSV脚本start_times列多余引号的技术咨询

解决CSV输出start_times列多余引号的脚本修改方案

问题根源

通常是因为原始数据中的start_times字段本身已包含引号,而脚本又对该字段额外添加了CSV格式的引号,导致嵌套重复出现。

具体修改步骤

1. 剥离原始字段引号后再格式化(awk场景)

如果你的脚本使用awk处理键值对数据,修改start_times字段的赋值逻辑,用gsub去掉字段首尾的引号:

awk -F'=' '{
    if ($1 == "job_name") job_name=$2;
    if ($1 == "start_times") {
        # 移除字段首尾的双引号
        gsub(/^"|"$/, "", $2)
        start_times=$2
    }
} END {
    printf "\"%s\",\"%s\"\n", job_name, start_times
}' test.txt

2. 避免重复添加引号(CSV工具场景)

如果使用csvkit这类专用工具辅助转换,不要同时启用自动引号和手动添加引号:

  • 错误写法(重复添加引号):csvformat -U 1 test.txt | awk '{print "\""$1"\",\""$2"\""}'
  • 修正写法:直接用工具处理原始数据,或仅做一次引号包裹:
# 先将键值对转为CSV结构,再统一格式化
awk -F'=' '{print $1","$2}' test.txt | csvformat -U 1

3. 通用引号处理函数(兼容带逗号字段)

如果需要兼容字段内包含逗号的场景,可封装通用处理函数,避免重复引号:

# 定义引号处理函数:先剥离已有首尾引号,再添加标准CSV引号
quote_field() {
    local raw_str="$1"
    # 去掉首尾引号
    raw_str="${raw_str%\"}"
    raw_str="${raw_str#\"}"
    printf "\"%s\"" "$raw_str"
}

# 在脚本中调用函数处理字段
awk -F'=' '{
    if ($1 == "job_name") job_name=$2;
    if ($1 == "start_times") start_times=$2;
} END {
    printf "%s,%s\n", quote_field(job_name), quote_field(start_times)
}' test.txt

验证效果

执行修改后的脚本,输出会从错误格式(如"daily_backup","""09:00,17:00""")变为正确格式:"daily_backup","09:00,17:00"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 17:12:45