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
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
Respuestas:
Como muchos otros lenguajes de programación, awk
distingue 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
. print
Es 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 condition
es falso, debería ser el valor de stmt2
pero 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 :)