¿Por qué awk imprime toda la línea cuando quiero que imprima una variable?

¿Por qué awk imprime toda la línea cuando quiero que imprima una variable?

Cuando escribo:

echo "foo bar" | gawk -v var="content" '{print $var}'

Espero que el resultado sea content. ¿Por qué es foo bar?

Respuesta1

Se hace referencia a las variables por su nombre como en var, no $varen awk. $nse refiere a la nth campo: $1para el primer campo, $2para el segundo... o todo el registro para n== 0 ( $0es el registro completo).

No es necesario que sean números literales. Puedes usar $(1+1)o $variable. Si variablecontiene 1, $variableserá el primer campo. Uno de uso común es $NFpara el último campo ( NFes la variable especial que contiene el número de campos).

Si, como en su ejemplo, la variable no contiene un número, esono númerose entiende como 0.

Entonces var="content"; print $var, es lo mismo que y var=0; print $var, por lo tanto, lo mismo que print $0, es decir, imprime el registro completo.

Lo que quieres aquí es:

echo "foo bar" | gawk -v var="content" '{print var}'

información relacionada