2012-01-04 4 views
19

특정 조건을 검사하고 해당 조건을 충족하는 행을 버리는 awk 스크립트를 작성하려고합니다.조건이 실행되면 어떻게 awk가 다음 줄로 이동합니까?

특정 조건은 파일의 처음 두 줄과 텍스트 xyzzy:으로 시작하는 줄을 버리는 것입니다. 이를 위해, 나는 일어 코딩 :

awk ' 
    NR < 2 {} 
    /^xyzzy:/ {} 
       {print}' 

는 그 두 조건 중 하나가, 그렇지 않으면 만나 인쇄 된 라인을 던져 것이라고 생각.

행이 다른 두 패턴 중 하나와 일치하는 경우에도 print이 처리 중임이 나타납니다.

현재 줄에 대한 다른 모든 조건 검사를 무시하고 다음 줄로 이동하는 C와 비슷한 continue 동작이 있습니까?

나는 과 같이 사용할 수 있습니다. ((NR > 1) && (!/^xyzzy:/)) {print}을 제 3의 규칙으로 사용하지만, 저에게는보기에 좋지 않습니다.

또는 다른 방법이 있습니까?

+0

내가 전문가는 오전 없지만 여기 정말 좋은 [튜토리얼] (http://www.grymoire.com/Unix/Awk은 다음과 같습니다

는 다음과 같은 관용구를 볼 수 있습니다. html) 나는 그것을 배우기 시작할 때 매우 도움이되었다. 그리고 물론 매우 정교한 가이드가 있습니다 (http://www.gnu.org/software/gawk/manual/gawk.pdf). 그러나 저는 책에 대한 튜토리얼을 좋아합니다. :) –

답변

29

액션으로 키워드 next를 사용

당신이이 개 파일을 반복 할 때이 키워드는 종종 유용하다; 때로는 두 번 처리하려는 파일과 동일합니다. awk``에

awk ' 
FNR==NR { 
    < stuff that works on file 1 only > 
    next 
} 
{ 
    < stuff that works on file 2 only > 
}' ./infile1 ./infile2 
+0

아, 게시하기 전에 Perlish '다음'을 시도 했어야합니다. 추신 나는'NR = <2'을 시도 했으므로 당신이'NR <= 2'을 의미한다고 가정하고 barfed했다. 건배. – paxdiablo

+0

아, 맞아, 그게 내가 의미하는 바야. – SiegeX

+1

'next'는 ** awk의 ** 최고의 기능 중 하나입니다. :) –

관련 문제