jq를 사용하여 디렉터리의 문서에 있는 JSON 요소 수의 합계를 찾는 방법

jq를 사용하여 디렉터리의 문서에 있는 JSON 요소 수의 합계를 찾는 방법

제 주변에도 하나 있어요3K각각 약 250개를 포함하는 디렉터리의 JSON 파일(+/-)JSON 요소 중 해당 파일에 있는 총 JSON 요소 수의 합을 계산하고 싶습니다.

현재 jq각 행의 숫자를 반환하는 아래와 같은 명령을 사용하고 있지만 이를 추가하여 합계를 계산하고 싶습니다.

jq length *.json

전류 출력,

250
248
250
240
...
...
250

예상 출력(에 대한),

600530

답변1

다음만 사용하세요 jq:

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

-s/ 입력을 단일 배열로 --slurp읽고 지정된 필터를 한 번만 실행합니다. 이 가상 배열의 각 요소를 실행 하고 숫자 배열을 반환한 다음 마지막으로 합계를 내는 데 사용됩니다.jqmaplengthadd

또한 명령줄 길이 제한에 도달하지 않았는지 확인하세요(그러나 이 경우 하위 디렉터리 1 의 파일 도 재귀적으로 처리됩니다).

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

발견된 파일은 배치로 전달되며 jq 'length'크기는 시스템에서 허용하는 최대 명령줄 길이에 따라 달라집니다. 입력을 빨아들이면 여러 번 find실행될 수 있고 jq출력이 두 번째(suck)로 파이프될 수 있으므로 안정적으로 작동하지 않습니다 jq.


1 이 사이트의 여러 Q&A는 디렉토리에 빠지는 것을 방지하는 방법을 보여줍니다 .find비재귀적으로 "찾기"를 사용하시나요?

답변2

간단한 명령을 사용할 수 있습니다 awk.

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

관련 정보