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

24

Cuando escribo:

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

Espero que la salida sea content. ¿Por qué es foo bar?

nicoco
fuente
8
Intente eliminar $de $ var
taliezin
En efecto. Me confundí con la sintaxis bash ...
nicoco
Es una buena pregunta y, aunque la respuesta muestra que $se extravió, no estoy seguro de que deba cerrarse como error tipográfico. He visto varios de estos recientemente, así que tal vez necesitemos uno canónico
Roaima

Respuestas:

45

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

Esos no tienen que ser números literales. Puedes usar $(1+1)o $variable. Si variablecontiene 1, entonces $variableserá el primer campo. Una 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, ese no número se entiende como 0.

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

Lo que quieres aquí es:

echo "foo bar" | gawk -v var="content" '{print var}'
Stéphane Chazelas
fuente