#awk #conditional-statements
Вопрос:
Есть странная вещь с условными операторами awk:
при запуске awk «если-еще, если-еще» с одной операцией после каждого условия, он работает нормально, как показано ниже:
awk 'BEGIN {a=30;
if (a==10) print "a = 10";
else if (a == 20) print "a = 20";
else print "a = 30"}'
выход:
a = 30
Однако при запуске awk «if-else if-else» с несколькими операциями (правильно привязанными) после «else if» произошла синтаксическая ошибка:
awk 'BEGIN {a=30;
if (a==10) print "a = 10";
else if (a == 20) {print "a = 20"; print "b = 20"};
else print "a = 30"}'
выход:
awk: cmd. line:4: else print "a = 30"}
awk: cmd. line:4: ^ syntax error
Может ли кто-нибудь сказать, является ли это проблемой awk, которая по своей сути не допускает нескольких операций в таких случаях, или это просто моя синтаксическая ошибка, которую можно исправить?
P.S. Я просмотрел все соответствующие сообщения о синтаксической ошибке awk «если бы еще», но ни одно из них не затрагивает эту проблему.
Комментарии:
1. это работает так
awk 'BEGIN {a=30; if (a==10) print "a = 10"; else if (a == 20) {print "a = 20"; print "b = 20"} else print "a = 30"}'
. Вы правы, и это не имеет никакого отношения к нескольким операциям! Я даже не понимал, что точку с запятой следует убрать между «иначе, если» и «иначе»… Я просто удалил все ненужные точки с запятой.2. Ни одно из продолжений строки не требуется внутри одной строки в кавычках.
3. Убрать точку с запятой (
;
) в конце третьей строки после закрытия фигурной скобки
Ответ №1:
Удалена точка с запятой в конце третьей строки после закрытия скобки.
awk 'BEGIN {a=30;
if (a==10) print "a = 10";
else if (a == 20) {print "a = 20"; print "b = 20"}
else print "a = 30"}'
Выход: a = 30