Как суммировать количество элементов JSON в документах внутри каталога с помощью jq

Думаю, вы просто забыли сделать torbrowserисполняемым файлом.

sudo chmod a+x /usr/bin/torbrowser

1
28.07.2020, 22:03
2 ответа

Использование только jq:

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

-s/ --slurpзаставляет jqсчитывать свой ввод как единый массив, запуская указанный фильтр только один раз против него. mapиспользуется для запуска lengthдля каждого элемента этого виртуального массива, возвращая массив чисел, и add, наконец, суммирует их.

Чтобы также убедиться, что не превышено ограничение длины командной строки (, но обратите внимание, что это также будет рекурсивно обрабатывать файлы в подкаталогах 1):

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

Найденные файлы передаются в jq 'length'пакетами, размер которых зависит от максимальной длины командной строки, разрешенной в вашей системе. Так как findможет запускать jqболее одного раза, его ввод не будет надежно работать, и вместо этого его вывод направляется во второй (slurp )jq.


1В нескольких вопросах и ответах на этом сайте показано, как предотвратить findпереход в каталоги; например, Использование «найти» не -рекурсивно?

6
18.03.2021, 23:16

Вы можете использовать простую команду awk, например

jq length./*.json | awk '{sum=sum+$0} END{print sum}'
2
18.03.2021, 23:16

Теги

Похожие вопросы