로그 파일을 조각으로 나누고 오류를 검색합니다.

로그 파일을 조각으로 나누고 오류를 검색합니다.

로그 파일을 조각으로 배열한 다음 이 조각에서 오류를 검색하고 싶습니다. 오류가 있으면 관련 로그 파일 조각을 다른 파일에 넣고 싶습니다.

작은 예:

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

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

logNN이 from 의 숫자인 파일로 리디렉션하려면 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 

관련 정보