Reproduzido de isto está encerrado como uma questão duplicada já que inclui avisos sobre as limitações da passagem do awk que podem ser úteis.
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 a nova linha personagem.
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