【问题标题】:How to iterate over a directory of files and save out to new files with jq and shell scripting?如何使用 jq 和 shell 脚本遍历文件目录并保存到新文件?
【发布时间】:2015-03-17 18:21:07
【问题描述】:

我正在使用 jq (http://stedolan.github.io/jq/) 从一些 JSON 文件中提取一些特定数据并将其转换为另一个 JSON 文件,例如:

cat data1.json | ./jq '[.["messages"][] | {to: .to, from: .from, body: .body, direction: .direction, date_sent: .date_sent }]' > results1.json

我在一个目录中有 50 个 JSON 文件可以执行此操作。如何编写一些 shell 脚本来遍历所有 50 个文件、执行所述功能并保存到 50 个已清理的 JSON 文件?

我认为它是这样的,但需要一些指导:

for file in *.json | ./jq | '[.["messages"][] | {to: .to, from: .from, body: .body, direction: .direction, date_sent: .date_sent }]' "$file" "$newfile.json" ; done

谢谢!

【问题讨论】:

    标签: json shell jq


    【解决方案1】:

    我不熟悉 jq,所以可能有一些方法可以让它在一次调用中处理许多文件。这将适用于每个文件调用一次:

    #!/bin/bash
    
    for file in *.json; do
        ./jq '[.["messages"...' < "$file" > "$file.scrubbed"
    done
    

    使用cat 将输入重定向到文件是多余的。只需改用&lt;

    如果您的输入文件遵循一致的命名方案,例如 datan.json,并且您希望调用输出文件,例如resultn.json,您可以改用 &gt; "${file/data/result}"(尽管它可能无法移植到某些非 Bash shell)。请注意,这样您就不会意外覆盖某些名称不包含“数据”的文件。在the Bash manual 中搜索${parameter/pattern/string}

    【讨论】:

    • 谢谢。这对我有用。也感谢您提供有关命名结果文件的说明。
    猜你喜欢
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    相关资源
    最近更新 更多