AWK - Ejemplos básicos
Este capítulo describe varios comandos AWK útiles y sus ejemplos apropiados. Considere un archivo de textomarks.txt para ser procesado con el siguiente contenido:
1) Amit Physics 80
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
Columna o campo de impresión
Puede indicar a AWK que imprima solo determinadas columnas del campo de entrada. El siguiente ejemplo demuestra esto:
Ejemplo
[jerry]$ awk '{print $3 "\t" $4}' marks.txt
Al ejecutar este código, obtiene el siguiente resultado:
Salida
Physics 80
Maths 90
Biology 87
English 85
History 89
En el archivo marks.txt, la tercera columna contiene el nombre de la materia y la cuarta columna contiene las calificaciones obtenidas en una materia en particular. Imprimamos estas dos columnas usando el comando de impresión AWK. En el ejemplo anterior,$3 and $4 representan el tercer y cuarto campo respectivamente del registro de entrada.
Impresión de todas las líneas
De forma predeterminada, AWK imprime todas las líneas que coinciden con el patrón.
Ejemplo
[jerry]$ awk '/a/ {print $0}' marks.txt
Al ejecutar este código, obtiene el siguiente resultado:
Salida
2) Rahul Maths 90
3) Shyam Biology 87
4) Kedar English 85
5) Hari History 89
En el ejemplo anterior, estamos buscando patrón de formulario a. Cuando una coincidencia de patrones tiene éxito, ejecuta un comando desde el bloque del cuerpo. En ausencia de un bloque de cuerpo, se toma la acción predeterminada que es imprimir el registro. Por lo tanto, el siguiente comando produce el mismo resultado:
Ejemplo
[jerry]$ awk '/a/' marks.txt
Impresión de columnas por patrón
Cuando una coincidencia de patrones tiene éxito, AWK imprime el registro completo de forma predeterminada. Pero puede indicarle a AWK que imprima solo ciertos campos. Por ejemplo, el siguiente ejemplo imprime el tercer y cuarto campo cuando una coincidencia de patrón tiene éxito.
Ejemplo
[jerry]$ awk '/a/ {print $3 "\t" $4}' marks.txt
Al ejecutar este código, obtiene el siguiente resultado:
Salida
Maths 90
Biology 87
English 85
History 89
Columna de impresión en cualquier orden
Puede imprimir columnas en cualquier orden. Por ejemplo, el siguiente ejemplo imprime la cuarta columna seguida de la tercera columna.
Ejemplo
[jerry]$ awk '/a/ {print $4 "\t" $3}' marks.txt
Al ejecutar el código anterior, obtiene el siguiente resultado:
Salida
90 Maths
87 Biology
85 English
89 History
Recuento e impresión de patrones coincidentes
Veamos un ejemplo en el que puede contar e imprimir el número de líneas para las que una coincidencia de patrón tuvo éxito.
Ejemplo
[jerry]$ awk '/a/{++cnt} END {print "Count = ", cnt}' marks.txt
Al ejecutar este código, obtiene el siguiente resultado:
Salida
Count = 4
En este ejemplo, incrementamos el valor del contador cuando una coincidencia de patrón tiene éxito e imprimimos este valor en el bloque END. Tenga en cuenta que, a diferencia de otros lenguajes de programación, no es necesario declarar una variable antes de usarla.
Impresión de líneas con más de 18 caracteres
Imprimamos solo aquellas líneas que contengan más de 18 caracteres.
Ejemplo
[jerry]$ awk 'length($0) > 18' marks.txt
Al ejecutar este código, obtiene el siguiente resultado:
Salida
3) Shyam Biology 87
4) Kedar English 85
AWK proporciona una función length función que devuelve la longitud de la cadena. $0La variable almacena la línea completa y, en ausencia de un bloque de cuerpo, se toma la acción predeterminada, es decir, la acción de impresión. Por lo tanto, si una línea tiene más de 18 caracteres, la comparación resulta verdadera y la línea se imprime.