로그 파일에서 비정상적인 행의 행 번호를 찾습니다.

로그 파일에서 비정상적인 행의 행 번호를 찾습니다.

로그 파일에서 일부 예외를 추출하고 일부 처리를 수행하는 쉘 스크립트를 작성 중입니다. 현재 스크립트에서 다음 명령을 사용하여 예외가 발생한 로그 파일의 줄 번호를 캡처하고 있습니다. 예외 줄에는 ERROR날짜 및 타임스탬프 뒤에 키워드가 포함됩니다.

lineNos=($(grep -n ERROR $file | grep Exception | cut -d':' -f1 | tail -3))

현재 스크립트를 테스트하는 동안 일부 로그 항목에 같은 줄에 오류와 예외가 포함되어 있음을 발견했지만 이는 실제로 내가 찾고 있는 오류 유형(예제 5줄)이 아니므로 내 스크립트를 다음과 같이 수정하고 싶습니다. 아래 예제 로그의 3행만 반환됩니다.

2016-10-21 15:25:37,231 INFO Processinng current row  
2016-10-21 15:25:37,231 INFO com.test.main com.test.controller.CrashException: 
2016-10-21 15:25:37,231 ERROR com.test.main com.test.controller.CrashException: 
2016-10-21 15:25:37,231 DEBUG com.test.main com.test.controller.CrashException: 
2016-10-21 15:25:37,231 DEBUG Processing row with ERROR and Exception 
2016-10-21 15:25:37,231 DEBUG processed row 1: 

답변1

ERRORsum이라는 단어가 포함된 행을 얻으려면 Exception다음을 시도하십시오.

grep -E "ERROR.*Exception" $file

답변2

awk대신 을 사용하면 grep줄 번호뿐만 아니라(더 정확하게는기록적인 숫자) 직접 테스트할 뿐만 아니라 공백으로 구분된 특정 필드를 개별적으로 테스트하기도 합니다.

awk '$3 == "ERROR" && /Exception/ {print NR}' logfile

또는 (더 구체적으로 - Exception마지막 일치 항목으로 제한)

awk '$3 == "ERROR" && $NF ~ /Exception/ {print NR}' logfile

답변3

cat thelogfile.log | nl -ba | grep "ERROR"

이것은 파일을 nl로 번호가 매겨진 줄로 파이프한 다음 grep을 사용하여 오류 줄을 필터링합니다. 오류 줄 번호만 원하면 awk '{print $1}'를 추가하세요. cat은 행 번호에 -n 플래그를 사용할 수도 있지만 저는 nl을 선호합니다.

잘못된 행 번호 배열 변수의 예;

linenos=($(cat -n thelogfile.log | grep "ERROR" | awk '{print $1}' | tr "\n" " " | sed 's/$/\n/'))

편집하다:

그냥 ps grep;

grep ",[0-9]* ERROR"

답변4

보다 구체적인 정규식을 사용하십시오.

grep '^[0-9, :-]\+ERROR' "$file"

관련 정보