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
보시다시피 3개의 중복된 mysql 오류가 있고 해당 오류의 빈도가 끝에 나타납니다. 첫 번째 오류에서는 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
임시 변수로 가져온 다음 sub() functoin을 사용하여 freq
현재 입력 레코드에서 마지막 필드를 제거합니다 .$0
이를 통해 seen[$0]+=freq
마지막 필드 값에 대한 동일한 로그 라인(마지막 필드는 이미 제외됨)을 이전에 변수에 보유했던 빈도와 합산합니다 freq
.
그런 다음 END에서 배열을 반복하고 라인과 전체 빈도를 인쇄합니다.