awk에서는 다음과 같이 할 것입니다.
awk '/pattern/{nr[NR]; nr[NR+4]}; NR in nr' file > new_file`
또는
awk '/pattern/{print; nr[NR+4]; next}; NR in nr' file > new_file`
설명
첫 번째 솔루션은 일치하는 모든 줄을 찾습니다 pattern
. 일치하는 것을 찾으면 레코드 번호 ( NR
)를 배열에 저장합니다 nr
. 또한 NR
동일한 배열에 네 번째 레코드를 저장합니다 . 이것은에 의해 수행됩니다 nr[NR+4]
. NR
그런 다음 모든 레코드 ( )를 검사하여 nr
배열에 레코드가 있는지 확인하여 레코드가 인쇄되는지 확인합니다.
두 번째 솔루션은 pattern
해당 라인을 인쇄 한 다음 4 번째 레코드를 배열에 먼저 저장 nr
한 후 다음 레코드로 이동하는 경우를 제외하고는 기본적으로 동일한 방식으로 작동 합니다 . 그런 다음 awk
이 네 번째 레코드를 만나면 NR in nr
블록이 실행되고이 +4 레코드를 인쇄합니다.
예
다음은 예제 데이터 파일 sample.txt
입니다.
$ cat sample.txt
1
2
3
4 blah
5
6
7
8
9
10 blah
11
12
13
14
15
16
첫 번째 솔루션 사용 :
$ awk '/blah/{nr[NR]; nr[NR+4]}; NR in nr' sample.txt
4 blah
8
10 blah
14
두 번째 솔루션 사용 :
$ awk '/blah/{print; nr[NR+4]; next}; NR in nr' sample.txt
4 blah
8
10 blah
14
egrep "pattern" -A4