2014-10-08 2 views
0

내가 다음 awk 명령을 한awk는 여러 줄 일치, 인쇄 파일 이름과 일치

awk -v RS=! -v ORS= '/abc/ && /def/ {print FILENAME;}' files 

이 다음 파일에있는 각 파일에 보이는하여 파일의 각 레코드를 분리하고,이 일치 'abc'및 'def'에 기록하십시오. 위의 코드는 파일의 이름을 출력합니다. {print FILENAME}을 제거하면 일치하는 경우 전체 레코드가 인쇄됩니다. 내가 파일 이름과 'ABC'를 일치하는 라인을 인쇄 할

abc1 
bce 
bcd 
def 
! 
abc2 
bce 
def 
! 

: 같은

파일이 보일 것이다. 예 :

file1 
abc1 

file2 
abc2 
abc3 

어떻게하면됩니까?

+0

/abc/{print $0} 당신이 어떤 파일이 일치하는 경우 인쇄 파일 이름을 하시겠습니까 서면으로 유사하다? 이것을 awk 스크립트 예제 (스크립트 수정)의 컨텍스트에서 수행해야합니까? 아니면 @ nu11p01n73R의 대답을 받아 들일만한 것입니까? –

답변

4
awk 'FNR==1{print FILENAME} /abc/' file1 file2 

FNR 필드는 새 파일을 읽을 1로 설정됩니다. FNR==1이 작업을 수행 할 각 입력 파일의 첫 번째 줄에서, 사실은 아무 조치도 지정하지 않기 때문에 전체 기록, file1

/abc/file2abc을 포함하는 모든 라인을 일치합니다 기본 인 인쇄를 할 print FILENAME입니다 ($0)이 수행됩니다.

file1 
abc1 

file2 
abc2 
abc3 
2
awk 'FNR==1{fname=FILENAME"\n"} /abc/{printf "%s%s\n", (fname?fname:""), $0; fname=""}' files