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

24

Quando digito:

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

Eu espero que a saída seja content. Por que é isso foo bar?

nicoco
fonte
8
Tente remover $de $ var
taliezin
De fato. Fiquei confuso com a sintaxe festa ...
nicoco
É uma boa pergunta e, embora a resposta mostre que o documento $foi extraviado, não tenho certeza de que deve ser fechado como erro de digitação. Eu vi vários deles recentemente por isso, talvez precisamos de um canônica
roaima

Respostas:

45

As variáveis ​​são referenciadas pelo nome como em var, não $varem awk. $nrefere-se ao campo nth : para o primeiro campo, para o segundo ... ou o registro inteiro para == 0 ( é o registro completo).$1$2n$0

Esses não precisam ser números literais. Você pode usar $(1+1)ou $variable. Se variablecontiver 1, $variableserá o primeiro campo. Um normalmente usado é $NFo ú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 contiver um número, esse número não será entendido como 0.

Portanto var="content"; print $var, é o mesmo que var=0; print $var, e, portanto , é o mesmo print $0que imprime o registro inteiro.

O que você quer aqui é:

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