Por que o awk imprime a linha inteira quando quero imprimir uma variável?

Por que o awk imprime a linha inteira quando quero imprimir uma variável?

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 $varin awk. $nrefere-se ao nth campo: $1para o primeiro campo, $2para 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 variablecontém 1, então $variableserá o primeiro campo. Um comumente usado é $NFpara 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 $vare, 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}'

informação relacionada