如何使用 jq 和 shell 脚本遍历文件目录并保存到新文件?
How to iterate over a directory of files and save out to new files with jq and shell scripting?
我正在使用 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
谢谢!
我不熟悉 jq,所以可能有一些方法可以让它在一次调用中处理多个文件。这将适用于每个文件调用一次:
#!/bin/bash
for file in *.json; do
./jq '[.["messages"...' < "$file" > "$file.scrubbed"
done
使用 cat
将输入重定向到文件是多余的。只需使用 <
即可。
如果您的输入文件遵循一致的命名方案,例如 datan.json 并且您希望输出文件被称为例如resultn.json,您可以改用 > "${file/data/result}"
(尽管它可能无法移植到某些非 Bash 炮弹)。小心不要不小心覆盖了一些名称不包含 "data" 的文件。在 the Bash manual.
中搜索 ${parameter/pattern/string}
我正在使用 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
谢谢!
我不熟悉 jq,所以可能有一些方法可以让它在一次调用中处理多个文件。这将适用于每个文件调用一次:
#!/bin/bash
for file in *.json; do
./jq '[.["messages"...' < "$file" > "$file.scrubbed"
done
使用 cat
将输入重定向到文件是多余的。只需使用 <
即可。
如果您的输入文件遵循一致的命名方案,例如 datan.json 并且您希望输出文件被称为例如resultn.json,您可以改用 > "${file/data/result}"
(尽管它可能无法移植到某些非 Bash 炮弹)。小心不要不小心覆盖了一些名称不包含 "data" 的文件。在 the Bash manual.