O que há de errado com o comando abaixo
awk 'BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"}'
Resultado :
awk: BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"}
awk: ^ syntax error
O que há de errado com o comando abaixo
awk 'BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"}'
Resultado :
awk: BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"}
awk: ^ syntax error
Respostas:
Como muitas outras linguagens de programação, awk
distingue expressões e declarações. De um modo geral, instruções são ações executadas, enquanto expressões são computações que resultam em um valor.
O operador ternário em awk
, como seu equivalente em C de onde vem, é ele próprio uma expressão (não uma declaração) que espera três outras expressões como expr1 ? expr2 : expr3
. print
é uma afirmação. Ele não pode ser usado onde uma expressão é solicitada, daí o erro de sintaxe.
Você já tentou awk 'BEGIN {a = 5;b=6; print (a==b)? "a==b" : "a!=b"}'
?
Usar uma declaração em que uma expressão é chamada não pode fazer sentido. Instruções não retornam valores. Então, quando você tem condition ? stmt1 : stmt2
, qual é o valor calculado pelo operador ternário? Se condition
for falso, deve ser o valor de, stmt2
mas não é um valor, é uma ação.
x = if true; print "yes"; else; print "no"; end
(cond1) ? printf("str1") : printf("str2")
? Obrigado, explicando as sutilezas do ternário. EDIT: na verdade, usando a seguinte construção feio: str = (cond1) ? sprintf("str1") : sprintf("str2"); printf("%s", str)
obras, mas neste momento é quase tão compacto e muito mais claro para usar if / else :)