Pourquoi awk imprime-t-il toute la ligne quand je veux imprimer une variable?

Quand je tape:

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

Je m'attends à ce que la sortie soit content . Pourquoi est-ce foo bar ?

Les variables sont référencées par nom comme dans var , pas $var dans awk . $n correspond au nième champ : $1 pour le premier champ, $2 pour le second … ou tout l'logging pour n == 0 ( $0 est l'logging complet).

Ceux-ci ne doivent pas être des nombres littéraux. Vous pouvez utiliser $(1+1) ou $variable . Si variable contient 1 , alors $variable sera le premier champ. Un terme communément utilisé est $NF pour le dernier champ ( NF est la variable spéciale qui contient le nombre de champs).

Si, comme dans votre exemple, la variable ne contient pas de nombre, ce nombre est compris comme 0.

Donc var="content"; print $var var="content"; print $var , est le même que var=0; print $var var=0; print $var , et donc la même chose que print $0 , c'est-à-dire imprimer tout l'logging.

Ce que vous voulez ici est:

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