¿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 ?

Las variables se referencen por nombre como en var , no $var en awk . $n refiere al n ésimo campo : $1 para el primer campo, $2 para el segundo … o todo el logging para n == 0 ( $0 es el logging completo).

Esos no tienen que ser numbers literales. Puede usar $(1+1) o $variable . Si la variable contiene 1 , entonces $variable será el primer campo. Una de uso común es $NF para el último campo ( NF es la variable especial que contiene el número de campos).

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

Entonces var="content"; print $var var="content"; print $var , es lo mismo que var=0; print $var var=0; print $var , y por lo tanto lo mismo que print $0 , es imprimir todo el logging.

Lo que quieres aquí es:

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