로그 파일을 조각으로 배열한 다음 이 조각에서 오류를 검색하고 싶습니다. 오류가 있으면 관련 로그 파일 조각을 다른 파일에 넣고 싶습니다.
작은 예:
로그 파일은 다음과 같습니다.
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이 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