Cómo permitir que Awk use variables de shell - Parte 11


Cuando escribimos shell scripts, normalmente incluimos otros programas o comandos más pequeños, como las operaciones Awk en nuestros scripts. En el caso de Awk, tenemos que encontrar formas de pasar algunos valores del shell a las operaciones de Awk.

Esto se puede hacer mediante el uso de variables de shell en los comandos de Awk, y en esta parte de la serie, aprenderemos cómo permitir que Awk utilice variables de shell que puedan contener valores que queremos pasar a los comandos de Awk.

Posiblemente hay dos formas en que puedes habilitar a Awk para usar variables de shell

1. Usando Shell Citar

Echemos un vistazo a un ejemplo para ilustrar cómo se puede usar la comilla de shell para sustituir el valor de una variable de shell en un comando Awk. En este ejemplo, queremos buscar un nombre de usuario en el archivo /etc/passwd , filtrar e imprimir la información de la cuenta del usuario.

Por lo tanto, podemos escribir un script test.sh con el siguiente contenido:

#!/bin/bash

#read user input
read -p "Please enter username:" username

#search for username in /etc/passwd file and print details on the screen
cat /etc/passwd | awk "/$username/ "' { print $0 }'

A partir de entonces, guarde el archivo y salga.

Interpretación del comando Awk en el script test.sh anterior:

cat /etc/passwd | awk "/$username/ "' { print $0 }'

: comillas de shell utilizadas para sustituir el valor de la variable de shell nombre de usuario en el comando Awk. El valor de nombre de usuario es el patrón a buscar en el archivo /etc/passwd .

Tenga en cuenta que la comilla doble está fuera de la secuencia de comandos Awk, ‘{print sh}’ .

Luego haga el script ejecutable y ejecútelo de la siguiente manera:

$ chmod  +x  test.sh
$ ./text.sh 

Después de ejecutar el script, se le pedirá que ingrese un nombre de usuario , escriba un nombre de usuario válido y presione Ingresar . Verá los detalles de la cuenta del usuario desde el archivo /etc/passwd de la siguiente manera:

2. Usando la asignación de variables de Awk

Este método es mucho más simple y mejor en comparación con el método anterior. Teniendo en cuenta el ejemplo anterior, podemos ejecutar un comando simple para realizar el trabajo. Bajo este método, usamos la opción -v para asignar una variable de shell a una variable Awk.

Primero, cree una variable de shell, username y asígnele el nombre que queremos buscar en el archivo /etc/passswd :

username="aaronkilik"

Luego escribe el siguiente comando y presiona Enter:

# cat /etc/passwd | awk -v name="$username" ' $0 ~ name {print $0}'

Explicación del comando anterior:

  1. -v – Awk option to declare a variable
  2. username – is the shell variable
  3. name – is the Awk variable

Veamos detenidamente sh ~ name dentro del script Awk, 'sh ~ name {print sh}' . Recuerde, cuando cubrimos los operadores de comparación Awk en la Parte 4 de esta serie, uno de los operadores de comparación fue el patrón de valor ~ , que significa: verdadero si el valor coincide con el patrón.

El output (sh) del comando cat canalizado a Awk coincide con el patrón (aaronkilik) que es el nombre que buscamos en /etc/passwd , como resultado, la operación de comparación es verdadera. La línea que contiene la información de la cuenta del usuario se imprime en la pantalla.

Conclusión

Hemos cubierto una sección importante de las características de Awk, que puede ayudarnos a usar variables de shell en los comandos de Awk. Muchas veces, escribirá pequeños programas o comandos de Awk dentro de los scripts de shell y, por lo tanto, debe tener una comprensión clara de cómo utilizar las variables de shell en los comandos de Awk.

En la siguiente parte de la serie Awk, analizaremos otra sección crítica de las características de Awk, es decir, las declaraciones de control de flujo. Así que estad atentos y sigamos aprendiendo y compartiendo.