Como muitas outras linguagens de programação, awk
faz distinção entre expressões e instruções. Em geral, as declarações são ações executadas, enquanto expressões são cálculos que resultam em um valor.
O operador ternário em awk
, como sua contraparte em C de onde vem, é em si uma expressão (não uma declaração) que espera outras três expressões como expr1 ? expr2 : expr3
. print
é uma declaração. Não pode ser usado onde uma expressão é chamada, daí o erro de sintaxe.
Você já tentou awk 'BEGIN {a = 5;b=6; print (a==b)? "a==b" : "a!=b"}'
?
O uso de uma instrução em que uma expressão é chamada não pode fazer sentido. Declarações não retornam valores. Então, quando você tem condition ? stmt1 : stmt2
, qual é o valor computado pelo operador ternário? Se condition
for falso, deve ser o valor de stmt2
, mas isso não é um valor, é uma ação.