Jq

如何使用 jq 對目錄內文件中的 JSON 元素的數量求和

  • July 28, 2020

我在一個目錄中有大約3K JSON 文件,每個文件在其中包含大約 250 **(+/-)**個JSON 元素,我想將這些文件中的 JSON 元素的總數計算為總和。

目前使用jq如下命令返回每行中的數字,但我想通過添加它們來計算總數,

jq length *.json

電流輸出

250
248
250
240
...
...
250

預期輸出(大約),

600530

僅使用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不止一次,因此使其輸入無法可靠地工作,而是將其輸出通過管道傳輸到第二個(slurping)jq


1 本站的幾個Q/A 展示瞭如何防止find進入目錄;例如,以非遞歸方式使用“查找”?

引用自:https://unix.stackexchange.com/questions/600765