특정 오류 메시지에 대해 날짜가 표시된 여러 로그를 grep한 다음 오류 메시지 수가 가장 많은 날짜가 표시된 로그를 확인합니다.

특정 오류 메시지에 대해 날짜가 표시된 여러 로그를 grep한 다음 오류 메시지 수가 가장 많은 날짜가 표시된 로그를 확인합니다.

안녕하세요, 제목에 표시된 솔루션을 찾고 있습니다.

날짜가 표시된 하나의 로그에서 특정 오류 메시지를 계산하는 방법을 알고 있지만 여러 로그에서 이 작업을 수행한 다음 오류 메시지가 가장 많이 발생하는 로그를 표시하는 방법을 찾는 데 어려움을 겪고 있습니다.

날짜가 표시된 단일 로그 파일의 경우, 예:

log1 = message.log.2022-01-07
log2 = message.log.2022-01-06
log3 = message.log.2022-01-05
log4 = message.log.2022-01-04

error message = ErrorCode123

통계 로그 1에서 오류 메시지 발생:

grep ErrorCode123 message.log.2022-01-07 | wc -l

하지만 4개의 ​​로그 각각에서 이를 자동화하여 어느 로그의 수가 가장 높은지 표시하려면 어떻게 해야 합니까? 이상적으로는 동일한 명명 규칙에 따라 주어진 수의 로그(4개가 아닌)를 수용할 수 있도록 일종의 와일드카드를 사용하는 것이 좋습니다.message.log.*

이런 식으로 사용하는 것이 실용적이지 않다면 grep다른 방법도 좋습니다.

답변1

역순으로 일치하는 항목 수:

grep -c ErrorCode123 message.log.* | awk -F':' '{print $2, $1}' | sort -nr
7 message.log.2022.01-05
4 message.log.2022.01-07
3 message.log.2022.01-06

상위 일치 항목만 반환: 추가| head -1

답변2

한 파일에 4개의 일치 항목이 포함되어 있고 다른 파일에는 더 적은 일치 항목이 포함되어 있다고 가정합니다.

$ grep -n ErrorCode123 message.log.* | sort -rt: -k2,2 | sort -ut: -k1,1 | sort -rt: -k2,2 | head -1
message.log.2022-01-04:4:ErrorCode123

이제 발생할 수 있는 문제는 일치하는 항목 수가 동일한 파일이 여러 개 있다는 것입니다.

관련 정보