awk: 필터 문자열 + 줄 수 계산?

awk: 필터 문자열 + 줄 수 계산?

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

관련 정보