Предполагая, у меня есть входной файл, содержимое которогоAwk GetLine() функция не работает на пустых строках
cat file
[source,I]
[source,more]
[source,1234]
[source,content]
Обратите внимание на две пустые строки первого следуют шаблону, начиная с [source
, а затем единую пустую строку из последующего и далее. Я хочу удалить один или несколько пустых строк, за которыми следует узор (или, альтернативно, положить, удалить одну пустую строку поверх рисунка, начиная с [source
). Я хочу, чтобы выход в
[source,I]
[source,more]
[source,1234]
[source,content]
Я выработал Awk
логику
awk '!NF{getline n; if (match(n, /^\[source/)) {print n}}' file
который работал отлично за исключением того, что пропустил шаблон, который следовал за две пустые строки и производится выход в
[source,more]
[source,1234]
[source,content]
Я пробовал, почему вызов getline()
был неудачным, напечатав линию NR, на которой Awk
должен был сделать match()
и напечатал линию,
awk '!NF{getline n; if (match(n, /^\[source/)) {print n} else {print NR}}' file
2 # Why did this fail for NR==2?
[source,more]
[source,1234]
[source,content]
Хотите знать, почему он не для NR==2
когда getline()
должен был возвратить [source,I]
и печататься же после сопоставления с регулярным выражением.
$ awk --version
GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4-p1, GNU MP 6.1.1)
Вы можете получить нужный результат из этого входного файла только с помощью 'awk 'NF' file'. Если это еще не все, что вы пытаетесь сделать, обновите вопрос, чтобы исходный текст лучше представлял вашу реальную проблему. –
@EdMorton: Обновите его сейчас! – Inian