Una variable de shell es solo eso: una shell variable . Si desea convertirlo en una variable awk , necesita una sintaxis como:
awk -v x="$x" "$2 == x {print $1}" infile
o
awk "$2 == x {print $1}" x="$x" infile
Sin embargo, esos sufren un problema: las secuencias de escape se expanden en ellos (y con GNU awk
4.2 o superior, si $x
comienza con @/
y termina en /
, se trata como un tipo de variable regexp ).
Entonces, por ejemplo, si la variable de shell contiene los dos caracteres barra invertida y n , la variable awk terminará conteniendo el carácter nueva línea (y con gawk 4.2+, si contiene @/foo/
, la variable awk contener foo
y ser del tipo regexp
).
Otro enfoque (pero que requiere un POSIX awk o nawk ( a diferencia del awk original que todavía se encuentra en algunos Unices impares)) es usar variables de entorno:
Otro enfoque (aún con awks más recientes) es usar la matriz ARGV en awk:
awk "BEGIN {x = ARGV[1]; delete ARGV[1]} $2 == x {print $1}" "$x" infile
Comentarios
No puede «utilizar variables externas en awk
directamente, primero debe importarlos como awk
variables.
x=3 awk -v foo="$x" "$2=foo{print $1}" infile