로그 파일의 오류 메시지 계산

로그 파일의 오류 메시지 계산
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column 'current_state' at r:1
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column 'current_state' at r:2
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column 'current_state' at r:5
java.lang.NullPointerException:12
java.lang.NullPointerException:7
java.lang.NullPointerException:18
java.lang.NullPointerException:2 

보시다시피, mysql 오류가 3번 반복되고 있으며 그 빈도는 마지막에 나타납니다. 첫 번째 오류에는 1이 표시되고, 두 번째 오류에는 2가 표시되고, 세 번째 오류에는 5가 표시됩니다. 스크립트에서 합계와 함께 반복되는 행을 유지하고 싶습니다. Java 오류에도 동일한 작업을 수행합니다.

예상 출력:

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value for column 'current_state' at r:8
java.lang.NullPointerException:39

답변1

awk 'BEGIN{ FS=OFS=":" }
   { freq=$NF; sub(/:[^:]*$/, ""); seen[$0]+=freq }
END{ for (x in seen) print x, seen[x] }' infile

FS는 입력 필드 구분 기호이고 OFS는 출력 필드 구분 기호입니다. 둘 다 콜론으로 설정한 다음 마지막 필드를 $NF임시 변수 에 넣은 freq다음 $0sub() 함수를 사용하여 현재 입력 레코드에서 마지막 필드를 제거합니다.

이를 통해 이전에 변수에 저장한 빈도 seen[$0]+=freq와 마찬가지로 마지막 필드(마지막 필드는 제외됨)의 값과 동일한 로그 라인을 요약합니다 .freq

그런 다음 마지막에는 배열을 반복하고 개별 행과 전체 빈도를 인쇄합니다.

관련 정보