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

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

我身边有3K一个目录内的 JSON 文件,每个文件大约包含 250 个(+/-)其中的 JSON 元素,我想将这些文件中的 JSON 元素总数计算为总和。

目前使用jq如下命令,该命令返回每行中的数字,但我想通过添加它们来计算总数,

jq length *.json

电流输出,

250
248
250
240
...
...
250

预期输出(大约),

600530

答案1

仅使用jq

jq -s 'map(length) | add' ./*.json

-s/--slurpjq其输入作为单个数组读取,仅对其运行指定的过滤器一次。map用于运行length该虚拟数组的每个元素,返回一个数字数组,add最后对它们求和。

还要确保不达到命令行长度限制(但请注意,这也会递归处理子目录1中的文件):

find . -name "*.json" -exec jq 'length' {} + | jq -s 'add'

找到的文件将分批传递,jq 'length'其大小取决于系统允许的最大命令行长度。由于find可能会运行jq多次,因此让它吸食其输入将无法可靠地工作,并且其输出会通过管道输送到第二个(吸食)jq


1 该站点上的几个问答展示了如何防止find下降到目录中;例如,非递归地使用“查找”?

答案2

您可以使用简单的awk命令即

jq length ./*.json | awk '{sum=sum+$0} END{print sum}'

相关内容