2014-12-28 4 views
1

주어진 경우 @ bash 줄 다음에 나오는 첫 번째 install: 줄을 인쇄하고 싶습니다. 전체 입력 파일을 볼 수 있지만, 여기에 샘플입니다일치 후 첫 경기

 
@ base-files 
; few lines 
install: x86_64/release/base-files/base-files-4.2-3.tar.xz 46428 6372358800e589b 
; couple of lines 
install: x86_64/release/base-files/base-files-4.1-1.tar.bz2 49519 f91ed6eab060c3 

@ bash 
; few lines 
install: x86_64/release/bash/bash-4.1.17-9.tar.xz 1107128 e49b8d67d59d8617dfa31c 
; couple of lines 
install: x86_64/release/bash/bash-4.1.16-8.tar.xz 1106812 5aa652ddc0a5d65f4af1e2 
source: x86_64/release/bash/bash-4.1.16-8-src.tar.xz 6614280 79bb3ddc67d8f0d3da6 

@ bash-completion 
; few lines 
install: x86_64/release/bash-completion/bash-completion-1.3-1.tar.bz2 117489 538 
source: x86_64/release/bash-completion/bash-completion-1.3-1-src.tar.bz2 216503 

출력이

 
install: x86_64/release/bash/bash-4.1.17-9.tar.xz 1107128 e49b8d67d59d8617dfa... 

내가이 명령을해야하지만, 그것은 두 포함 모든 라인을 인쇄하십시오. 응답 이외에

awk '/@ bash$/,/install:/' setup.ini 

내가 만들어 이것을 0

awk '$1=="@" {c=$2} $1=="install:" && c=="bash" {print;exit}' 

답변

5

당신은 사용할 수 있습니다 : 당신은 내 어깨 위에 읽는되어 있어야합니다

awk '/@ bash$/{p=1} p&&/install:/{print; exit}' setup.ini 
install: x86_64/release/bash/bash-4.1.17-9.tar.xz 1107128 e49b8d67d59d8617dfa31c 
+0

- 심지어 변수의 이름 아래! –

+0

@JonathanLeffler 나는 'exit'을 좋아한다. 대용량 파일의 경우 도움이 될 것이다. –

+0

네, 같은 변수 이름을 사용하는 것이 재미 있다는 것을 알게되었습니다. 'p'는 필자가 가장 좋아하는'awk' 변수 이름 인 것 같습니다. 왜 그런지 모르겠습니다. 그러나 'exit'는이 줄 뒤에 입력 파일이 큰 경우 속도 향상을 수행합니다. – anubhava

4
awk '/^@ bash/ { p = 1 } /^install:/ && p == 1 { print; p = 2 }' 

가변 p 디폴트; @ bash 행을 읽을 때 1로 설정하십시오. 다음 설치 행을 읽을 때 인쇄하고 p를 2로 설정하면 다른 설치 행은 인쇄되지 않습니다. 또한 p = 2을 설정하는 대신 종료 할 수도 있습니다.