我在一个目录中有大约3K 个JSON 文件,每个文件中包含大约 250 个(+/-) JSON 元素,我想将这些文件中的 JSON 元素总数计算为总和。
目前使用jq
像下面这样的命令,它在每一行中返回数字,但我想通过添加它们来计算总数,
jq length *.json
Run Code Online (Sandbox Code Playgroud)
电流输出,
250
248
250
240
...
...
250
Run Code Online (Sandbox Code Playgroud)
预期产出(大约),
600530
Run Code Online (Sandbox Code Playgroud)
jq
仅使用:
jq -s 'map(length) | add' ./*.json
Run Code Online (Sandbox Code Playgroud)
-s
/--slurp
将jq
其输入作为单个数组读取,仅对它运行一次指定的过滤器。map
用于length
为该虚拟数组的每个元素运行,返回一个数字数组,add
最后对它们求和。
还要确保不达到命令行长度限制(但请注意,这也会递归处理子目录1中的文件):
find . -name "*.json" -exec jq 'length' {} + | jq -s 'add'
Run Code Online (Sandbox Code Playgroud)
找到的文件jq 'length'
分批传递,其大小取决于系统允许的最大命令行长度。由于find
可能会运行jq
多次,因此使其输入无法可靠地工作,并且其输出会通过管道传输到第二个(slurping)jq
。
1 本站的几个问答展示了如何防止find
下降到目录中;例如,非递归地使用“查找”?