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

基于条件从JSON文件提取指定字段的AWK代码优化需求

解决方案:提取JSON中指定字段的AWK优化代码

针对你的需求,优化后的AWK代码可以准确筛选出Dmo = Path的块,并按预期格式输出:

BEGIN {
    FS = "\""  # 以双引号作为分隔符,直接提取引号内的内容
}
/"Filename":/ {
    filename = $4  # 捕获引号包裹的文件名
    has_path = 0   # 标记当前文件是否存在符合条件的块
}
/"Dmo": "Path"/ {
    in_path_block = 1  # 标记当前进入Dmo=Path的块
}
/"Value":/ && in_path_block {
    value = $4
    printf "%s, %s\n", filename, value
    has_path = 1
    in_path_block = 0  # 处理完当前Value后重置标记
}
/^}/ {  # 每个JSON文件结束时检查标记
    if (!has_path) {
        print filename
    }
    # 重置所有标记,准备处理下一个文件
    filename = ""
    has_path = 0
    in_path_block = 0
}

代码说明

  • FS = "\"":将分隔符设为双引号,避免处理多余的逗号、空格,直接提取引号内的有效内容
  • /"Filename":/:捕获文件名,同时初始化has_path标记
  • /"Dmo": "Path"/:标记当前处于目标块中,后续仅处理此块内的Value字段
  • /"Value":/ && in_path_block:仅在目标块内提取Value,按格式输出文件名+Value,并标记当前文件存在符合条件的块
  • /^}/:JSON文件结束时,若未找到目标块,单独输出文件名

执行结果

将代码保存为extract.awk,执行命令 awk -f extract.awk input,输出与预期完全一致:

File_213, /Files/2024/abd
File_213, /Files/2024/Ndew
File_4
File_43, /Files/2023/Roi2

补充说明

如果JSON格式更复杂(比如嵌套层级深、换行不固定),建议使用专门的JSON处理工具jq,实现更简洁可靠:

jq -r '
    .Filename as $fn |
    (.Blocks[] | select(.Dmo == "Path") | .Value) as $val |
    if $val then "\($fn), \($val)" else $fn end
' input

若必须使用AWK,上述优化代码可满足当前需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 01:10:55