Lo que está mal con el siguiente comando
awk 'BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"}'Salida:
awk: BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"}
awk:                           ^ syntax error
Como muchos otros lenguajes de programación, awkdistingue entre expresiones y declaraciones. En general, las declaraciones son acciones que se llevan a cabo, mientras que las expresiones son cálculos que dan como resultado un valor.
El operador ternario en awk, como su contraparte en C de donde proviene, es en sí mismo una expresión (no una declaración) que espera otras tres expresiones como expr1 ? expr2 : expr3. printEs una declaración. No se puede usar donde se solicita una expresión, de ahí el error de sintaxis.
¿Lo has intentado awk 'BEGIN {a = 5;b=6; print (a==b)? "a==b" : "a!=b"}'?
El uso de una declaración donde se solicita una expresión no puede tener ningún sentido. Las declaraciones no devuelven valores. Entonces, cuando tiene condition ? stmt1 : stmt2, ¿cuál es el valor calculado por el operador ternario? Si conditiones falso, debería ser el valor de stmt2pero no es un valor, es una acción.
x = if true; print "yes"; else; print "no"; end(cond1) ? printf("str1") : printf("str2")? Gracias por explicar las sutilezas del ternario. EDIT: de hecho, utilizando la siguiente construcción fea:str = (cond1) ? sprintf("str1") : sprintf("str2"); printf("%s", str)obras, pero en este momento es casi tan compacto y mucho más clara de usar if / else :)