로그 파일을 여러 부분으로 분할하고 오류를 검색합니다.

로그 파일을 여러 부분으로 분할하고 오류를 검색합니다.

로그 파일을 여러 부분으로 분할한 다음 해당 부분에서 오류를 검색하고 싶습니다. 오류가 발생하면 관련 로그 파일 조각을 다른 파일에 넣고 싶습니다.

작은 예:

로그 파일은 다음과 같습니다.

STARTLOG1
blabla
more_blabla
ENDLOG1
STARTLOG2오류
: 오류텍스트XYZ 사용자의 오류입니다.
ENDLOG2 STARTLOG3 blabla more_blabla ENDLOG3





로그 파일을 여러 부분으로 나누고 싶습니다. STARTLOG와 ENDLOG 사이의 모든 줄은 1이어야 합니다. 조각에 오류가 발생하면 전체 조각을 파일로 추출합니다. 파일은 다음과 같아야 합니다.

STARTLOG2
오류: 오류텍스트 사용자 XYZ ENDLOG2에 대한
오류 입니다.

답변1

이 시도:

$ awk -v RS="STARTLOG" '/ERROR/{print RS$0; }' log
STARTLOG2
ERROR: Errortext
This is an Error
from user XYZ
ENDLOG2

이름이 지정된 파일( logN여기서 N은 숫자) 로 리디렉션하려면 STARTLOG다음을 사용하세요.

gawk -v RS="STARTLOG" '/ERROR/{print RS$0 > "log"$1; }' log

설명하다

RS"행"의 의미를 정의하는 레코드 구분 기호입니다 awk. 여기에서는 STARTLOG전체 레코드를 하나의 행으로 처리하도록 설정했습니다 . 그런 다음 해당 "줄"에 가 포함되어 있으면 ERROR인쇄합니다 STARTLOG( RS, 이는 동일한 형식을 다시 만들기 위한 것입니다).

Perl에서도 동일한 접근 방식을 사용할 수 있습니다.

perl -lne 'BEGIN{$/="STARTLOG"}{print "$/$_" if /ERROR/}' log 

관련 정보