Как вы получаете awk для перехода к следующей строке при выполнении условия?
Я пытаюсь написать awk
script, который проверяет определенные условия и выбрасывает строки, удовлетворяющие этим условиям.
Конкретным условием является выброс первых двух строк файла и любой строки, начинающейся с текста xyzzy:
. С этой целью я закодировал:
awk '
NR < 2 {}
/^xyzzy:/ {}
{print}'
думая, что он выбрасывает линии, где выполняется любое из этих двух условий, и печатайте иначе.
К сожалению, похоже, что print
обрабатывается, даже если строка соответствует одному из двух других шаблонов.
Есть ли C-подобное действие continue
, которое будет перемещаться по следующей строке, игнорируя все другие проверки условий для текущей строки?
Я полагаю, что я мог бы использовать что-то вроде ((NR > 1) && (!/^xyzzy:/)) {print}
в качестве третьего правила, но для меня это кажется довольно уродливым.
Альтернативно, есть ли другой способ сделать это?
Ответы
Ответ 1
Используйте ключевое слово next
как свое действие
Это ключевое слово часто полезно, если вы хотите перебирать более 2 файлов; иногда это тот же файл, который вы хотите обработать дважды.
Вы увидите следующую идиому:
awk '
FNR==NR {
< stuff that works on file 1 only >
next
}
{
< stuff that works on file 2 only >
}' ./infile1 ./infile2