如何使用 jq 对目录内文档中的 JSON 元素数量求和

Alw*_*nny 2 jq

我在一个目录中有大约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)

fra*_*san 6

jq仅使用:

jq -s 'map(length) | add' ./*.json
Run Code Online (Sandbox Code Playgroud)

-s/--slurpjq其输入作为单个数组读取,仅对它运行一次指定的过滤器。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下降到目录中;例如,非递归地使用“查找”?