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

AWK处理autorep输出生成CSV脚本的问题排查与修正

修正Bash脚本实现autorep输出到正确CSV格式化

问题根源

不同类型作业的autorep输出字段排版存在差异:JOB_A的watch系列字段可能在独立行但未被匹配,JOB_B的command与machine字段可能在同一行导致被合并,原脚本的固定字段匹配逻辑无法适配这些情况。

修正后的脚本

#!/bin/bash
JOB_NAME="$1"

autorep -j "$JOB_NAME" -q | awk '
BEGIN {
    # 预定义所有需要捕获的字段,按需扩展
    fields["job_name"] = ""
    fields["watch_file"] = ""
    fields["watch_interval"] = ""
    fields["command"] = ""
    fields["machine"] = ""
    fields["owner"] = ""
    FS = ": *"
}

# 匹配普通键值对行
/^[A-Za-z_]+: / {
    key = $1
    value = substr($0, index($0, ":") + 2)
    fields[key] = value
    next
}

# 处理command与machine合并的行(JOB_B场景)
/command: .*machine: / {
    # 提取command内容
    cmd_pos = index($0, "command: ") + 9
    machine_pos = index($0, "machine: ")
    fields["command"] = substr($0, cmd_pos, machine_pos - cmd_pos - 1)
    # 提取machine内容
    fields["machine"] = substr($0, machine_pos + 9)
    next
}

# 单独匹配watch系列字段(确保不遗漏)
/^watch_file: / { fields["watch_file"] = substr($0, 13) }
/^watch_interval: / { fields["watch_interval"] = substr($0, 18) }

END {
    # 输出CSV,若字段含逗号需加双引号,示例如下
    printf "\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\"\n", 
        fields["job_name"], fields["watch_file"], fields["watch_interval"],
        fields["command"], fields["machine"], fields["owner"]
}
' > "${JOB_NAME}_output.csv"

核心修正说明

  • 预定义字段数组:确保所有可能出现的字段都被初始化,避免CSV列错位,缺失字段输出空值。
  • 精准值提取:使用substr+index替代固定的$n匹配,适配不同行的字段长度变化。
  • 场景化匹配:针对JOB_B的合并字段、JOB_A的watch字段分别编写匹配逻辑,覆盖不同作业类型的输出格式。
  • CSV格式兼容:输出时用双引号包裹字段,避免字段含逗号导致格式错误。

适配调整建议

  1. 执行autorep -j JOB_A -q和autorep -j JOB_B -q,查看实际输出格式,调整AWK中的正则表达式和字符串截取位置。
  2. 若有其他特殊字段(如run_window等),添加到fields数组并补充对应匹配逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 19:05:22