variável externa no awk [duplicado]

4

Eu tenho um script, no qual um trecho de script é

x=3
awk '$2=$x{print $1}' infile

a variável externa é x,

mas solicita um erro no awk

Então, nessa situação, como fazer o awk ser executado com sucesso?

obrigado!

    
por wenzi 19.11.2012 / 18:11

2 respostas

6

Uma variável shell é apenas isso: uma variável shell . Se você quer transformá-lo em uma variável awk , você precisa de uma sintaxe como:

awk -v x="$x" '$2 == x {print $1}' infile

ou

awk '$2 == x {print $1}' x="$x" infile

No entanto, eles sofrem de um problema: as sequências de escape são expandidas neles.

Assim, por exemplo, se a variável shell contiver os dois caracteres barra invertida e n , a variável awk acabará contendo o caractere nova linha .

Outra abordagem (mas que requer um awk ou nawk POSIX (em oposição ao awk original, como ainda é encontrado em alguns Unices ímpares)) é usar variáveis de ambiente:

x="$x" awk '$2 == ENVIRON["x"] {print $1}' infile

Outra abordagem (ainda com awks mais recentes) é usar o array ARGV no awk:

awk 'BEGIN {x = ARGV[1]; delete ARGV[1]}
  $2 == x {print $1}' "$x" infile
    
por 19.11.2012 / 20:23
2

Você não pode usar variáveis externas em awk diretamente, você deve importá-las como awk variables primeiro.

x=3
awk -v foo="$x" '$2=foo{print $1}' infile
    
por 19.11.2012 / 18:13

Tags