Спасибо за внимание.
У меня есть сценарий AWK с чем-то вроде этого;
/^test/{
if ($2 == "2") {
# What goes here?
}
# Do some more stuff with lines that match test, but $2 != "2".
}
NR>1 {
print $0
}
Я бы хотел пропустить оставшуюся часть действия, но обработать остальные шаблоны / действия в одной строке.
Я пробовал return
, но это не функция.
Я пробовал next
, но это пропускает остальные шаблоны / действия для текущей строки.
Пока я завернул остальную часть действия ^test
в else
оператора if
, но мне было интересно, есть ли лучший подход.
Не уверен, что это имеет значение, но я использую gawk
в OSX, установленной через brew
(для лучшей совместимости с моей целевой ОС).
Обновление (с решением):
Правки: расширенный пример кода, основанный на ответе @ karakfa.
BEGIN{
keepLastLine = 1;
}
/^test/ && !keepLastLine{
printLine = 1;
print $0;
next;
}
/^test/ && keepLastLine{
printLine = 0;
next;
}
/^foo/{
# This is where I have the rest of my logic (approx 100 lines),
# including updates to printLine and keepLastLine
}
NR>1 {
if (printLine) {
print $0
}
}
Это будет работать для меня, мне даже нравится больше, чем то, о чем я думал.
Однако мне интересно, что, если мое условие keepLastLine было доступно только в цикле for?
Из того, что сказал @karakfa, я понял, что нет структуры управления для выхода только из действия и продолжения работы с другими шаблонами, так что это должно быть реализовано с каким-то флагом (в отличие от ответа @ RavinderSingh13) ).