Как вы получаете awk, чтобы перейти к следующей строке, когда условие выполнено? - PullRequest
21 голосов
/ 04 января 2012

Я пытаюсь написать сценарий awk, который проверяет определенные условия и выбрасывает строки, соответствующие этим условиям.

Особое условие заключается в отбрасывании первых двух строк файла и любой строки, котораяначинается с текста xyzzy:.С этой целью я закодировал:

awk '
    NR < 2    {}
    /^xyzzy:/ {}
              {print}'

, думая, что он отбросит строки, где было выполнено любое из этих двух условий, и напечатает иначе.

К сожалению, похоже, что print обрабатывается, даже если строка соответствует одному из двух других шаблонов.

Существует ли действие C-like continue, которое будет перемещаться на следующую строку, игнорируя все другие проверки условий для текущей строки?

Полагаю, я мог бы использовать что-то вроде ((NR > 1) && (!/^xyzzy:/)) {print} в качестве третьего правила, но мне это кажется довольно уродливым.

В качестве альтернативы, есть ли другой способ сделать это?

1 Ответ

33 голосов
/ 04 января 2012

Используйте ключевое слово next в качестве вашего действия

Это ключевое слово часто полезно, когда вы хотите перебрать 2 файла;иногда это один и тот же файл, который вы хотите обработать дважды.

Вы увидите следующую идиому:

awk '
FNR==NR {  
  < stuff that works on file 1 only >
  next
}
{
  < stuff that works on file 2 only >
}' ./infile1 ./infile2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...