Quando eu digito:
echo "foo bar" | gawk -v var="content" '{print $var}'
Espero que a saída seja content
. Por que é isso foo bar
?
Responder1
As variáveis são referenciadas pelo nome como in var
, não $var
in awk
. $n
refere-se ao n
th campo: $1
para o primeiro campo, $2
para o segundo... ou o registro inteiro para n
== 0 ( $0
é o registro completo).
Esses não precisam ser números literais. Você pode usar $(1+1)
ou $variable
. Se variable
contém 1
, então $variable
será o primeiro campo. Um comumente usado é $NF
para o último campo ( NF
é a variável especial que contém o número de campos).
Se, como no seu exemplo, a variável não contém um número, issonão-númeroé entendido como 0.
Então var="content"; print $var
, é o mesmo que var=0; print $var
e, portanto, o mesmo que print $0
, ou seja, imprime o registro inteiro.
O que você quer aqui é:
echo "foo bar" | gawk -v var="content" '{print var}'