2012-07-04 3 views
2

awk를 사용하여 범위 패턴과 일치하는 라인을 알아야합니다. 내가 일치하고 싶었 방법awk 범위 패턴 - 범위 패턴 시작에서 무언가를 수행

some random text 
some random text START this is first line I want to match with START 
some random text 
some random text 
some random text 
some random text START this line contains another START but I dont want matched this line 
some random text 
some random text END this line is last of my range 
some random text 
... input text countinues, more range matches can be found 

:

/START/,/END/ { 
if ((index($0,"START"))) { 
# do something when range starts 
} 
#do some other things 
} 

을하지만 난 내 인덱스가 범위의 중간에 라인 6에서 START 일치하는 것을 실현 내가 입력 다음 있다고 가정 . 첫 번째 인덱스와의 첫 번째 일치 후 플래그를 높이는 것에 대해 생각하고 있지만, NR과 비슷한 전역 변수와 같은 좀 더 우아한 방법이 있습니까?

EDIT : 입력 텍스트가 계속되고, 더 많은 범위 일치를 찾을 수 있습니다. 플래그를 올리거나 카운팅을 사용하면 범위 끝나기 후에 플래그/카운트를 재설정해야합니다 (인덱스 ($ 0, "END") 추가). 원하지 않음

+1

플래그를 사용합니다. –

답변

0

모든 것을 먼저 배열로 읽어 들인 다음 첫 번째 요소 만 조작 할 수 있습니다. 그것은 마커 플래그보다 예쁘게 만들 수 있는지 모르겠습니다.

0

편도. 범위 내에서 변수를 증가 시키십시오. 1과 같을 때만 범위의 시작과 일치합니다. 두 번째 START 줄에서는 5가되고 i == 1 수표를 계승하지 않습니다.

/START/,/END/ { 
    ++i 
    if (i == 1) { 
     print "Range starts" 
    } 
    print "Other things" 
}