자격을 갖춘 구분 항목을 추출하는 방법은 무엇입니까? [복사]

자격을 갖춘 구분 항목을 추출하는 방법은 무엇입니까? [복사]

---각 항목이 다음과 같이 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

파일을 단일 문자열로 삼아 레코드로 분할하고 일치하는 항목을 찾은 다음 대략적인 레코드 구분 기호와 연결합니다.

관련 정보