如何使用 jq 汇总多个文件中的 属性?
How can I summarize a property across multiple files with jq?
我有很多 JSON 个文件,如下所示:
{
"property": "value1",
...
}
我想要的是一个如下所示的输出文件:
{
"<filename1>": "<value1>",
"<filename2>": "<value2>",
"<filename3>": "<value3>",
...
}
这可以通过两次 jq
调用和一个 shell 管道来实现:
jq '{(input_filename):.property}' * | jq -s add
但是,我想知道这是否可以通过单个 jq
调用(或任何其他更简单的方法)实现。
我目前正在使用 jq
版本 1.5-1 以防相关。
结合使用 inputs
和 -n
选项可以顺序访问所有输入文件。
直接类推,您可以使用 [inputs]
创建由 -s
选项创建的数组,然后像以前一样 add
增加项目:
jq -n '[inputs | {(input_filename): .property}] | add' *
但以更直接的方式,您可以使用 reduce
迭代构建结果对象:
jq -n 'reduce inputs as $in ({}; .[input_filename] = $in.property)' *
我有很多 JSON 个文件,如下所示:
{
"property": "value1",
...
}
我想要的是一个如下所示的输出文件:
{
"<filename1>": "<value1>",
"<filename2>": "<value2>",
"<filename3>": "<value3>",
...
}
这可以通过两次 jq
调用和一个 shell 管道来实现:
jq '{(input_filename):.property}' * | jq -s add
但是,我想知道这是否可以通过单个 jq
调用(或任何其他更简单的方法)实现。
我目前正在使用 jq
版本 1.5-1 以防相关。
结合使用 inputs
和 -n
选项可以顺序访问所有输入文件。
直接类推,您可以使用 [inputs]
创建由 -s
选项创建的数组,然后像以前一样 add
增加项目:
jq -n '[inputs | {(input_filename): .property}] | add' *
但以更直接的方式,您可以使用 reduce
迭代构建结果对象:
jq -n 'reduce inputs as $in ({}; .[input_filename] = $in.property)' *