我正在使用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
谢谢!
答案 0 :(得分:3)
我不熟悉jq,因此可能有一些方法可以让它在一次调用中处理多个文件。这适用于每个文件调用一次:
#!/bin/bash
for file in *.json; do
./jq '[.["messages"...' < "$file" > "$file.scrubbed"
done
使用cat
将输入重定向到文件是多余的。只需使用<
代替。
如果您的输入文件遵循一致的命名方案,例如数据 n .json ,并且您希望调用输出文件,例如结果 n .json ,您可以使用> "${file/data/result}"
代替(虽然它可能无法移植到某些非Bash shell)。注意这样你就不会意外地覆盖一些名称不包含&#34;数据&#34;虽然。在the Bash manual中搜索 $ {parameter / pattern / string} 。