На сьогодні це питання було дано багато хороших відповідей, але я все одно сумую за тим, що awk
не користуюся getline
. Оскільки, взагалі , користуватися не потрібно getline
, я б пішов на:
awk ' f && NR==f+1; /blah/ {f=NR}' file #all matches after "blah"
або
awk '/blah/ {f=NR} f && NR==f+1' file #matches after "blah" not being also "blah"
Логіка завжди полягає у збереженні рядка, де знайдено "бла", а потім друкуванні тих рядків, які є одним рядком після.
Тест
Зразок файлу:
$ cat a
0
blah1
1
2
3
blah2
4
5
6
blah3
blah4
7
Отримайте всі рядки після "бла". Це друкує ще один "благ", якщо він з’являється після першого.
$ awk 'f&&NR==f+1; /blah/ {f=NR}' a
1
4
blah4
7
Отримайте всі рядки після "бла", якщо вони не містять "бла".
$ awk '/blah/ {f=NR} f && NR==f+1' a
1
4
7
-A1
варіант