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.