我可以使用 jq 组合 2 个 json 文件,因此:
jq -s '.[0] * .[1]' file1.json file2.json >merged.json
我可以通过使用循环组合任意数量的 json 文件,并在第二次和后续迭代中,使用前一个操作的输出作为输入之一。通过进程替换,可以通过管道完成:
jq -s '.[0] * .[1]' file1.json file2.json | \
jq -s '.[0] * .[1]' <(cat) file3.json | \
jq -s '.[0] * .[1]' <(cat) file4.json ...
但是如何在不编写中间版本的情况下编写任意数量文件合并的脚本?
(我想,如果文件数量非常多,我将会遇到 ulimits/文件句柄问题 - 我还不担心这一点)。
您可以通过一次调用 jq 来完成此操作:
jq -n 'reduce inputs as $i({};. * $i)' file{1..4}.json