Este es el primer artículo de la nueva serie de tutoriales de awk. Publicaremos varios artículos sobre awk en las próximas semanas que cubrirán todas las características de awk con ejemplos prácticos.
En este artículo, repasemos la metodología de trabajo fundamental de awk junto con 7 ejemplos prácticos de impresión de awk.
Nota: Asegúrese de revisar nuestra serie de tutoriales de Sed anterior.
Introducción a Awk y operaciones de impresión
Awk es un lenguaje de programación que permite una fácil manipulación de datos estructurados y la generación de informes formateados. Awk representa los nombres de sus autores “A jo, W einberger y K Ernighan”
El Awk se utiliza principalmente para escanear y procesar patrones. Busca uno o más archivos para ver si contienen líneas que coincidan con los patrones especificados y luego realiza las acciones asociadas.
Algunas de las características clave de Awk son:
- Awk ve un archivo de texto como registros y campos.
- Al igual que el lenguaje de programación común, Awk tiene variables, condicionales y bucles
- Awk tiene operadores aritméticos y de cadenas.
- Awk puede generar informes formateados
Awk lee desde un archivo o desde su entrada estándar y genera su salida estándar. Awk no se lleva bien con los archivos que no son de texto.
Syntax: awk '/search pattern1/ {Actions} /search pattern2/ {Actions}' file
En la sintaxis de awk anterior:
- el patrón de búsqueda es una expresión regular.
- Acciones:declaración(es) a realizar.
- Varios patrones y acciones son posibles en Awk.
- archivo:archivo de entrada.
- Las comillas simples alrededor del programa son para evitar que Shell no interprete ninguno de sus caracteres especiales.
Metodología de trabajo Awk
- Awk lee los archivos de entrada una línea a la vez.
- Para cada línea, coincide con el patrón dado en el orden dado, si coincide realiza la acción correspondiente.
- Si ningún patrón coincide, no se realizará ninguna acción.
- En la sintaxis anterior, el patrón de búsqueda o la acción son opcionales, pero no ambos.
- Si no se proporciona el patrón de búsqueda, Awk realiza las acciones indicadas para cada línea de la entrada.
- Si no se proporciona la acción, imprima todas las líneas que coincidan con los patrones dados, que es la acción predeterminada.
- Las llaves vacías sin ninguna acción no hacen nada. No realizará la operación de impresión predeterminada.
- Cada declaración en Acciones debe estar delimitada por punto y coma.
Vamos a crear el archivo employee.txt que tiene el siguiente contenido, que se usará en los
ejemplos que se mencionan a continuación.
$cat employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000
Ejemplo 1 de Awk. Comportamiento predeterminado de Awk
Por defecto, Awk imprime cada línea del archivo.
$ awk '{print;}' employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000
En el ejemplo anterior, no se da el patrón. Entonces las acciones son aplicables a todas las líneas.
La acción imprimir sin ningún argumento imprime la línea completa por defecto. Entonces imprime todas las
líneas del archivo sin fallar. Las acciones deben encerrarse entre llaves.
Awk Ejemplo 2. Imprime las líneas que coinciden con el patrón.
$ awk '/Thomas/ > /Nisha/' employee.txt 100 Thomas Manager Sales $5,000 400 Nisha Manager Marketing $9,500
En el ejemplo anterior, imprime toda la línea que coincide con 'Thomas' o 'Nisha'. Tiene dos patrones. Awk acepta cualquier cantidad de patrones, pero cada conjunto (patrones y sus acciones correspondientes) debe estar separado por una nueva línea.
Ejemplo 3 de Awk. Imprimir solo un campo específico.
Awk tiene varias variables integradas. Para cada registro, es decir, línea, divide el registro delimitado por el carácter de espacio en blanco de forma predeterminada y lo almacena en las variables $n. Si la línea tiene 4 palabras, se almacenará en $1, $2, $3 y $4. $0 representa toda la línea. NF es una variable incorporada que representa el número total de campos en un registro.
$ awk '{print $2,$5;}' employee.txt Thomas $5,000 Jason $5,500 Sanjay $7,000 Nisha $9,500 Randy $6,000 $ awk '{print $2,$NF;}' employee.txt Thomas $5,000 Jason $5,500 Sanjay $7,000 Nisha $9,500 Randy $6,000
En el ejemplo anterior $2 y $5 representan Nombre y Salario respectivamente. También podemos obtener el Salario usando $NF, donde $NF representa el último campo. En la declaración de impresión ',' es un concatenador.
Ejemplo 4 de Awk. Inicialización y acción final
Awk tiene dos patrones importantes que se especifican mediante la palabra clave BEGIN y END.
Syntax: BEGIN { Actions} {ACTION} # Action for everyline in a file END { Actions } # is for comments in Awk
Las acciones especificadas en la sección BEGIN se ejecutarán antes de comenzar a leer las líneas de la entrada.
Las acciones END se realizarán después de completar la lectura y el procesamiento de las líneas de la entrada.
$ awk 'BEGIN {print "Name\tDesignation\tDepartment\tSalary";} > {print $2,"\t",$3,"\t",$4,"\t",$NF;} > END{print "Report Generated\n--------------"; > }' employee.txt Name Designation Department Salary Thomas Manager Sales $5,000 Jason Developer Technology $5,500 Sanjay Sysadmin Technology $7,000 Nisha Manager Marketing $9,500 Randy DBA Technology $6,000 Report Generated --------------
En el ejemplo anterior, imprime el título y el último archivo de los informes.
Awk Ejemplo 5. Encuentre los empleados que tienen una identificación de empleado superior a 200
$ awk '$1 >200' employee.txt 300 Sanjay Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy DBA Technology $6,000
En el ejemplo anterior, el primer campo ($1) es la identificación del empleado. Entonces, si $1 es mayor que 200, simplemente realice la acción de impresión predeterminada para imprimir toda la línea.
Awk Ejemplo 6. Imprima la lista de empleados en el departamento de Tecnología
Ahora el nombre del departamento está disponible como un cuarto campo, por lo que debe verificar si $4 coincide con la cadena "Tecnología", si es así, imprima la línea.
$ awk '$4 ~/Technology/' employee.txt 200 Jason Developer Technology $5,500 300 Sanjay Sysadmin Technology $7,000 500 Randy DBA Technology $6,000
El operador ~ es para comparar con las expresiones regulares. Si coincide con la acción predeterminada, es decir, se realizará la impresión de toda la línea.
Awk Ejemplo 7. Imprimir número de empleados en el departamento de Tecnología
El siguiente ejemplo, verifica si el departamento es Tecnología, si es así, en la Acción, simplemente incremente la variable de conteo, que se inicializó con cero en la sección COMENZAR.
$ awk 'BEGIN { count=0;} $4 ~ /Technology/ { count++; } END { print "Number of employees in Technology Dept =",count;}' employee.txt Number of employees in Tehcnology Dept = 3
Luego, al final del proceso, simplemente imprima el valor de conteo que le da la cantidad de empleados en el departamento de Tecnología.
Lecturas recomendadas
Artículos adicionales de Awk
- Variables definidas por el usuario de Awk con 3 ejemplos prácticos
- 8 potentes variables integradas de Awk:FS, OFS, RS, ORS, NR, NF, FILENAME, FNR
- 7 potentes ejemplos de operadores Awk (operadores Awk unarios, binarios, aritméticos, de cadena, de asignación, condicionales, Reg-Ex)
- 4 ejemplos de sentencias If de Awk (if, if else, if else if, :? )
- ¿Atrapado en el bucle? Ejemplos de Awk While, Do While, For Loop, Break, Continue, Exit