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}'