로그 파일에서 특정 섹션을 추출하는 방법을 찾으려고 합니다. 각 부분은 고정 문자열 "<--------------->"로 구분됩니다.
<-------------->
abc: def1
ghi: jkl1
xyz generated: def1
<-------------->
abc: def2
ghi: jkl2
xyz generated: def2
Dec 04, 2021 2:51:05 AM abcdefg
SEVERE: [Line 447.149] Lorem ipsum dolor sit amet at [Line 212.2]
Dec 04, 2021 2:51:05 AM abcdefg
SEVERE: [Line 1315.78] Lorem ipsum dolor sit amet at [Line 147.138]
xyz generated: def2
<-------------->
abc: def3
ghi: jkl3
xyz generated: def3
<-------------->
sed/grep을 사용하여 SEVERE 또는 WARNING 단어가 포함된 부분을 추출할 수 있습니까?
또 다른 방법은 행 수를 계산하는 것입니다. 3줄만 삭제할 수 있습니다. 더 많은 행이 있는 다른 모든 섹션은 내가 추출하려는 섹션입니다.
답변1
각 블록을 GNU AWK의 레코드로 생각할 수 있습니다.
awk -v RS='<-------------->\n' -v ORS='' '/SEVERE|WARNING/'
이는 구분 기호와 그 후행 개행 문자를 레코드 구분 기호로 처리합니다. "SEVERE" 또는 "WARNING"과 일치하는 모든 레코드는 새 줄을 구분하지 않고 출력됩니다. 일치하는 레코드를 분리하려면 ORS
설정을 기본값으로 그대로 둘 수 있습니다.
awk -v RS='<-------------->\n' '/SEVERE|WARNING/'
그러면 마지막 항목을 포함하여 일치하는 각 레코드 뒤에 새 행이 추가됩니다.