JSON 데이터가 있습니다.
"Item1": {
"foo": null,
"version": "bar",
"result": null,
},
"Item2": {
"foo": null,
"version": "bar",
"result": null,
},
"Item3": {
"foo": null,
"version": "bar",
"result": null,
},
문자열을 필터링 할 awk
수 있습니다.
$ awk '/version/' /tmp/json
"version": "bar",
"version": "bar",
"version": "bar",
나는 행 수를 세고 파이프 없이 다음 결과를 얻으려고 합니다. 순수 awk입니다.
$ awk '/version/' /tmp/json | wc -l
3
온라인 예제에서는 사용 방법을 보여 주지만 END
내가 NR
원하는 결과는 나오지 않습니다.
$ awk '/version/{print NR}' /tmp/json
3
8
13
또는
$ awk 'END/version/{print NR}' /tmp/json
awk: line 1: syntax error at or near /version/
답변1
에서 이 작업을 수행해야 하는 경우 awk
일치하는 각 줄에 대해 변수를 증가시킨 다음 모든 줄이 처리되면 해당 변수를 인쇄하면 됩니다.
$ awk '/version/{c++}END{print c}' file
3
0
또는 일치하는 항목이 없을 때 인쇄 하려면 (위의 내용은 빈 줄만 인쇄함) 다음을 사용하세요.
awk '/version/{c++}END{print c+0}' file
드디어 인쇄 가능오직일치하는 항목이 하나 이상 있는 경우(일치 항목이 없으면 빈 줄이 아닌 출력이 없음) 다음을 사용합니다.
awk '/version/{c++}END{ if(c) print c}'
답변2
awk 'BEGIN { count=0 } /version/ { count++ } END { printf( "%d\n", count ) }' datafile.json
그러나 더 간단하게는 다음과 같습니다.
grep -c 'version' datafile.json