각각 다음 내용을 포함하는 파일 1.txt
및 2.txt
가 있다고 가정해 보겠습니다 .3.txt
foo1
Notes
foo2
bar
이제 내가 배치한 라인을 인쇄하고 싶습니다.뒤쪽에패턴을 Notes
파일 끝까지 포함하며 foo
또는 bar
패턴을 포함합니다. 이를 달성하기 위해 다음 명령을 실행합니다.
awk '/Notes/,/getline==0/ {if (/foo|bar/) {print}}' *txt
그러나 awk
이 범위는 두 번째 파일이 처리되면 재설정되는 것으로 보입니다. 결과는 다음과 같습니다( foo2
합계 항목만 표시되어야 함).bar
foo2
bar
foo1
foo2
bar
foo1
foo2
bar
분명히 내가 그렇게 한다면:
for i in $(*txt); do awk '/Notes/,/getline==0/ {if (/foo|bar/) {print}}' $i; done
...모든 것이 괜찮겠지만, 물론 awk
각 파일에 대해 새로운 프로세스를 시작하고 싶지 않으므로 이는 실제로 해결책이 아닙니다.
awk
제 질문은 이 검색 범위를 /Notes/,/NR==0/
마스크/그룹의 모든 파일 에 적용 하려면 어떻게 해야 합니까?입니다 .*txt
답변1
/getline==0/
수색무늬 getline==0
, 이런 일은 절대 일어나지 않을 것입니다.
GNU awk가 있다면 이것을 할 수 있습니다
gawk '/Notes/{notes=1} notes && /foo|bar/ {print} ENDFILE{notes=0}'
그렇지 않으면 (좀 더 관용적으로)
awk 'FNR==1{notes=0} /Notes/{notes=1} notes && /foo|bar/'