---
각 항목이 다음과 같이 series 로 구분되는 로그 파일이 있습니다 .
-----------------
Name=Operation1
Time: 100
Status=Success
-----------------
Name=Operation1
Time: 500
Status=Failure
-----------------
Name=Operation2
Time: 200
Status=Success
-----------------
Name=Operation2
Time: 800
Status=Failure
-----------------
Name=Operation1
특정 조건과 일치하는 모든 항목(예: 가 있는 모든 항목 또는 가 있는 모든 항목 Status=Failure
) 을 추출하고 싶습니다 . 다음과 같이 agrep을 사용할 수 있을 거라 생각했습니다. agrep -d "---*" -e "Name=Operation1" mylogfile > myfilteredlogfile
그런데 파일을 살펴보니 예상한 대로 필터링이 되지 않는 것 같습니다. 필터링에 어떤 문제가 있으며, 원하는 항목을 어떻게 추출할 수 있나요?
답변1
awk
멀티바이트 레코드 구분 기호를 허용하는 경우 다음을 시도하십시오.
awk -vRS="-----------------" -vORS="-----------------" '/Failure/' file
Name=Operation1
Time: 500
Status=Failure
-----------------
Name=Operation2
Time: 800
Status=Failure
-----------------
답변2
Perl은 어떻습니까?
perl -0777 -snE 'say join "---", grep {/$patt/i} split /^-+$/m' -- -patt="status=fail" file
Name=Operation1
Time: 500
Status=Failure
---
Name=Operation2
Time: 800
Status=Failure
파일을 단일 문자열로 삼아 레코드로 분할하고 일치하는 항목을 찾은 다음 대략적인 레코드 구분 기호와 연결합니다.