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

21

Quando eu digito:

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

Espero que a saída seja content . Por que é foo bar ?

    
por nicoco 21.06.2016 / 15:12

1 resposta

41

As variáveis são referenciadas por nome como em var , não $var in awk . $n refere-se ao campo n th : $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 contiver 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 contiver um número, esse non-number será entendido como 0.

Portanto, var="content"; print $var é igual a var=0; print $var e, portanto, igual a print $0 , ou seja, imprime o registro inteiro.

O que você quer aqui é:

echo "foo bar" | gawk -v var="content" '{print var}'
    
por 21.06.2016 / 15:16

Tags