синтаксическая ошибка в awk «если-еще, если-еще» с несколькими операциями

#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