![jq를 사용하여 디렉터리의 문서에 있는 JSON 요소 수의 합계를 찾는 방법](https://linux55.com/image/177680/jq%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EC%9D%98%20%EB%AC%B8%EC%84%9C%EC%97%90%20%EC%9E%88%EB%8A%94%20JSON%20%EC%9A%94%EC%86%8C%20%EC%88%98%EC%9D%98%20%ED%95%A9%EA%B3%84%EB%A5%BC%20%EC%B0%BE%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
제 주변에도 하나 있어요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
읽고 지정된 필터를 한 번만 실행합니다. 이 가상 배열의 각 요소를 실행 하고 숫자 배열을 반환한 다음 마지막으로 합계를 내는 데 사용됩니다.jq
map
length
add
또한 명령줄 길이 제한에 도달하지 않았는지 확인하세요(그러나 이 경우 하위 디렉터리 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}'