로그 파일을 여러 부분으로 분할한 다음 해당 부분에서 오류를 검색하고 싶습니다. 오류가 발생하면 관련 로그 파일 조각을 다른 파일에 넣고 싶습니다.
작은 예:
로그 파일은 다음과 같습니다.
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