검색 라인과 검색 문자열의 발생 횟수를 표시하려면 어떻게 해야 합니까?

검색 라인과 검색 문자열의 발생 횟수를 표시하려면 어떻게 해야 합니까?

특정 문자열을 기반으로 콘솔에 모든 결과와 개수를 표시하는 스크립트를 작성 중입니다.

예: "ERROR"라는 문자열을 검색하여 다음과 같은 결과를 얻었다고 가정합니다. 여기서 ERROR 발생 횟수는 5입니다.

2013-12-08 13:43:07 SUSE::SRPrivate - [error]  ERROR: Couldn't connect to server: (7)
2014-01-08 13:43:06 SUSE::SRPrivate - [error]  ERROR: Couldn't connect to server: (7)
2014-02-08 13:43:24 SUSE::SRPrivate - [error]  ERROR: Timeout was reached: (28)
2014-03-08 13:43:03 SUSE::SRPrivate - [error]  ERROR: Couldn't connect to server: (7)
2014-04-08 13:43:24 SUSE::SRPrivate - [error]  ERROR: Timeout was reached: (28)

로그와 발생 횟수(행)를 표시하고 싶습니다. 로그를 표시하기 위해 다음 스크립트를 작성했습니다.

(zgrep -E "ERROR|Exception" $SS_HOME/logs/*.gz $PROBE_HOME/logs/*.gz $RELAY_HOME/logs/*.gz ;find . -type f -name "*.log" -exec cat {} +) | grep -F ERROR | sort

행 수를 추가하는 방법을 모르겠습니다. 추가 정보가 필요하면 알려주시기 바랍니다.

답변1

일치하는 줄을 표시하려면 다음을 사용하여 개수를 계산하고 표시합니다 awk.

awk '/ERROR/{err++; print} END{print "errors:", err}'

오류 및 예외 요약:

awk '/ERROR/||/Exception/{faults++; print} END{print "faults:", faults}'

오류와 예외를 별도로 계산합니다.

awk '/ERROR/{err++; print} /Exception/{exc++; print}
     END{print "errors:", err, "exceptions:", exc}'

참고: awk 프로그램은 필터 역할을 하며 표준 입력에서 읽고 표준 출력에 쓰지만 데이터 파일을 인수로 제공할 수도 있습니다. 따라서 사용할 것은 (아래 설명에서 요청한 대로) 하나 이상의 로그 파일이 있거나 awk '...' *.loguse 로 구문 분석하기 전에 하나 이상의 gz 파일의 압축을 풀고 싶은 경우입니다 awk. 예를 들어 zcat *.gz | awk '...'awk프로그램 중 하나를 사용하면 대체됩니다 . 에 의해 awk '...').

답변2

wc옵션과 함께 명령을 사용하십시오 -l.

wc -l

로그도 인쇄하려면 다음을 사용할 수 있습니다 tee.

cat logs.txt | grep -i error | tee >(wc -l)

관련 정보