4

我正在使用 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

谢谢!

4

1 回答 1

7

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

#!/bin/bash

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

用于将cat输入重定向到文件是多余的。改用就好<了。

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

于 2015-03-17T19:01:45.193 回答