Для extract the Nth line after a matching pattern
вы хотите:
awk 'c&&!--c;/pattern/{c=N}' file
например
awk 'c&&!--c;/Revision:/{c=5}' file
напечатал 5-ю строчку после текста «Редакция:» /.
FYI следующие идиомы описывают, как выбрать диапазон записей, дан конкретный шаблон для соответствия:
а) Печать всех записей из некоторого шаблона:
awk '/pattern/{f=1}f' file
б) Распечатать все записи после того, как некоторые картина:
awk 'f;/pattern/{f=1}' file
с) Печать Nth запись после некоторого шаблона:
awk 'c&&!--c;/pattern/{c=N}' file
г) Печать каждую запись, кроме N-й записи после некоторой схеме:
awk 'c&&!--c{next}/pattern/{c=N}1' file
е) Вывести N записи после некоторой схеме:
awk 'c&&c--;/pattern/{c=N}' file
е) печати каждой записи кроме N записи после некоторой схеме:
awk 'c&&c--{next}/pattern/{c=N}1' file
г) Вывести N записей из некоторого шаблона:
Я изменил имя переменной с «f» на «найдено» на «c» для «подсчета», когда это необходимо, поскольку это более выразительно, чем переменная на самом деле является IS.
'c &&! - c' эквивалентно' c! = 0 && --c == 0' и 'c && c -' эквивалентно 'c! = 0 && --c> = 0'; альтернативы могут быть проще понять. – musiphil
Одно из предостережений заключается в том, что если шаблон появляется снова, прежде чем перейти к следующей линии N'th, счетчик будет сброшен, а предыдущие появления будут забыты. Например, в c), если N = 10, а шаблон - в строках 21 и 28, тогда будет напечатана только строка 38, но не строка 31. Чтобы справиться с этим, вы можете использовать 'awk '/ pattern/{p [ NR + N] = 1} NR в p'' (проще) или 'awk '/ pattern/{p [NR + N] = 1} NR в p {print; delete p [NR]} ''(ограничивает использование памяти). – musiphil
Как изменить f.), Чтобы не печатать строку с рисунком (это делается сейчас)? – Betlista