Cuando utilizamos awk dentro de un script en shell o desde la línea de comandos, es común incluir variables de shell dentro del cuerpo del comando awk. Si lo hacemos del modo «tradicional», puede ocurrir lo siguiente:
Tenemos un archivo de texto muy sencillo, simplemente contiene varias columnas con números:
$ cat test.txt 5555 763 923 1 234
Podemos mostrar únicamente la primera columna usando awk:
$ awk '{print $1}' test.txt 5555
Si quisiéramos, por ejemplo, mostrar la primera columna pero únicamente si su valor numérico es superior a X, declarando X en una variable, de primeras lo intentaríamos hacer así:
$ LIMITE=500; awk '{print $1}' test.txt | awk '$1>$LIMITE'
¿Qué sucede? Nada, por salida estándar no sale nada y debería, pues el mínimo es 500 y la columna tiene un valor de 5555. El problema es que la última sentencia de awk no está aplicando el valor de la variable $LIMITE, no la reconoce.
Una de las formas correctas de declarar variables de shell dentro de awk es la siguiente:
$ LIMITE=500; awk '{print $1}' test.txt | awk -v limite="$LIMITE" '$1>limite' 5555
Ahora sí que está funcionando. Hemos utilizado el método que ofrece awk para asignamiento de variables de shell. Básicamente se asigna una variable a un patrón determinado, en este caso «limite» a la variable «$LIMITE»:
-v var=val --assign=var=val
Otro ejemplo:
$ FOO="Esto es una prueba"; awk -v prueba="$FOO" 'BEGIN {print prueba}' Esto es una prueba
Un comentario en “Usar variables de shell en un script awk”
Comments are closed.