Будь-ласка, ви зробите це наступним чином
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. Він також зберігає 4-й запис з NRтого ж масиву. Це робиться nr[NR+4]. Кожен запис ( NR) перевіряється, чи він присутній у nrмасиві, якщо так записаний запис.
Друге рішення працює по суті таким же чином, за винятком випадків, коли він стикається, patternвін друкує цей рядок, а потім зберігає четвертий запис попереду нього в масиві 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
Використання 1-го рішення:
$ awk '/blah/{nr[NR]; nr[NR+4]}; NR in nr' sample.txt
4 blah
8
10 blah
14
Використання 2-го рішення:
$ awk '/blah/{print; nr[NR+4]; next}; NR in nr' sample.txt
4 blah
8
10 blah
14
egrep "pattern" -A4