2016-09-29 2 views
1

두 번째 일치가 처음 발생했을 때까지 첫 번째 일치를 포함하여 모든 줄을 인쇄하려고합니다. 첫 경기.첫 번째 패턴과 두 번째 패턴 사이에 줄을 인쇄 할 때 두 번째 패턴이 첫 번째 패턴의 위와 아래에서 발생합니다.

내가 가진 파일은 아래와 같이 빈 줄로 구분되는 기록을 포함

host  host1 
key1  value 
key2  value 
key3  value 

host  host2 
key1  value 
key2  value 
key3  value 
key4  value 
key5  value 

host  host3 
key1  value 
key2  **aaaa** 
key3  value 

host  host3 
key1  value 
key2  value 

의 내 검색 패턴은 "AAAA"라고 할 수 있습니다. 빈 라인까지 첫 번째 일치 위의 라인을 "aaaa"로 인쇄하고 빈 라인까지 "aaaa"에 첫 번째 일치하는 라인을 인쇄하고 싶습니다. 따라서 검색 결과는 다음과 같이 출력되어야합니다 :

host  host3 
key1  value 
key2  aaaa 
key3  value 

각 레코드에는 다른 수의 줄이 포함되므로 사용할 수 없습니다.

답변

0
$ awk -v RS= '/aaaa/' file 
host  host3 
key1  value 
key2  **aaaa** 
key3  value 
+0

고마워요 작품 .... 어떻게 하나 이상의 일치하는 경우 레코드 사이에 빈 줄을 추가 할 것이라고? – user6901586

+0

한 가지 더 RS 케이스를 구분하지 못하게하려면 어떻게해야합니까? – user6901586

+0

출력 레코드 사이에 빈 줄을 인쇄하려면'-v ORS = '\ n \ n "을 추가하십시오. RS는 비어 있으므로 대소 문자를 구분하지 않습니다. 대소 문자를 구분하지 않기 때문입니다. –

0

답변을 찾은 것 같습니다. 비슷한 솔루션을 찾고 누군가를 위해, 다음과 같은 AWK 사용할 수 있습니다 그건 당신이 기대하는 출력을 생성하는 동안 불필요하게 둔한 별 것 때문에 멀티 문자의 RS에 불필요한 입력 리디렉션을 사용하여,

awk 'BEGIN{ RS="\n\n"; FS="\n"; } /aaaa/ {print}' << inputfile 
+0

을, FS를 아무 이유없이 설정하고 중복 동작으로 기본 동작을 지정합니다. 올바른 접근 방법은 http://stackoverflow.com/a/39783262/1745001을 참조하십시오. –

관련 문제