Awk es un lenguaje de secuencias de comandos que se utiliza para procesar o analizar archivos de texto. O podemos decir que el comando awk se usa principalmente para agrupar datos en función de una columna o campo, o de un conjunto de columnas. Principalmente se usa para reportar datos de una manera útil. También emplea bloques de inicio y finalización para procesar los datos.
AWK significa ‘Aho, Weinberger y Kernighan’
En este tutorial, aprenderemos el comando awk con ejemplos prácticos.
Sintaxis de awk
# awk ‘patrón {acción}’ archivo de entrada > archivo de salida
Tomemos un archivo de entrada con los siguientes datos
$ cat awk_file Name,Marks,Max Marks Ram,200,1000 Shyam,500,1000 Ghyansham,1000 Abharam,800,1000 Hari,600,1000 Ram,400,1000
Ahora, profundicemos en ejemplos prácticos del comando awk.
1) Imprimir todas las líneas de un archivo
De forma predeterminada, awk imprime todas las líneas de un archivo, por lo que para imprimir cada línea del archivo creado anteriormente, use el siguiente comando:
$ awk '{print;}' awk_file Name,Marks,Max Marks Ram,200,1000 Shyam,500,1000 Ghyansham,1000 Abharam,800,1000 Hari,600,1000 Ram,400,1000
Nota: En awk, el comando ‘{print;}’ se usa para imprimir todos los campos junto con sus valores.
2) Imprima solo un campo específico como 2do y 3ro
En el comando awk, usamos el símbolo $ (dólar) seguido del número de campo para imprimir los valores de campo. En el siguiente ejemplo, estamos imprimiendo el campo 2 (es decir, Marcas) y el campo 3 (es decir, Max Marks)
$ awk -F "," '{print $2, $3;}' awk_file Marks Max Marks 200 1000 500 1000 1000 800 1000 600 1000 400 1000
En el comando anterior hemos usado la opción -F “,” que especifica que la coma (,) es el separador de campo en el archivo.
3) Imprime las líneas que coincidan con el patrón.
Quiero imprimir las líneas que contienen la palabra «Hari & Ram», ejecutar
$ awk '/Hari|Ram/' awk_file Ram,200,1000 Hari,600,1000 Ram,400,1000
4) ¿Cómo encontramos valores únicos en la primera columna del nombre?
Para imprimir valores únicos de la primera columna, ejecute debajo del comando awk
$ awk -F, '{a[$1];}END{for (i in a)print i;}' awk_file Abharam Hari Name Ghyansham Ram Shyam
5) Cómo encontrar la suma de la entrada de datos en una columna en particular
En el comando awk, también es posible realizar alguna operación aritmética basada en la búsqueda, la sintaxis se muestra a continuación
$ awk -F, ‘$1==”Artículo1″{x+=$2;}END{imprimir x}’ awk_file
En el siguiente ejemplo, buscamos Ram y luego agregamos valores del segundo campo para la palabra Ram.
$ awk -F, '$1=="Ram"{x+=$2;}END{print x}' awk_file 600
6) Cómo encontrar el total de todos los números en una columna
En el comando awk, también podemos calcular la suma de todos los números en una columna de un archivo. En el siguiente ejemplo, estamos calculando la suma de todos los números de la 2.ª y 3.ª columna.
$ awk -F"," '{x+=$2}END{print x}' awk_file 3500 $ awk -F"," '{x+=$3}END{print x}' awk_file 5000
7) Cómo encontrar la suma de registros de grupos individuales
Por ejemplo, si consideramos la primera columna, podemos hacer la suma de la primera columna en función de los elementos
$ awk -F, '{a[$1]+=$2;}END{for(i in a)print i", "a[i];}' awk_file Abharam, 800 Hari, 600 Name, 0 Ghyansham, 1000 Ram, 600 Shyam, 500
8) Encuentre la suma de todas las entradas de columnas específicas y agréguelas al final del archivo
Como ya discutimos que el comando awk puede hacer la suma de todos los números de una columna, entonces para agregar la suma de la columna 2 y la columna 3 al final del archivo, ejecute
$ awk -F"," '{x+=$2;y+=$3;print}END{print "Total,"x,y}' awk_file Name,Marks,Max Marks Ram,200,1000 Shyam,500,1000 Ghyansham,1000 Abharam,800,1000 Hari,600,1000 Ram,400,1000 Total,3500 5000
9) Cómo encontrar el recuento de entradas en cada columna según la primera columna
$ awk -F, '{a[$1]++;}END{for (i in a)print i, a[i];}' awk_file Abharam 1 Hari 1 Name 1 Ghyansham 1 Ram 2 Shyam 1
10) Cómo imprimir solo el primer registro de cada grupo
Para imprimir solo el primero de cada grupo, ejecute debajo del comando awk
$ awk -F, '!a[$1]++' awk_file Name,Marks,Max Marks Ram,200,1000 Shyam,500,1000 Ghyansham,1000 Abharam,800,1000 Hari,600,1000
Bloque de inicio de AWK
La sintaxis para el bloque BEGIN es
$ awk ‘BEGIN{código de inicialización de awk}{código AWK real}’ Nombre del archivo
Vamos a crear un archivo de datos con los siguientes contenidos
11) Cómo completar los nombres de cada columna junto con sus datos correspondientes
$ awk 'BEGIN{print "NamesttotaltPPTtDoctxls"}{printf "%-st%dt%dt%dt%dn", $1,$2,$3,$4,$5}' datafile
12) Cómo cambiar el separador de campo
Como podemos ver, el espacio es el separador de campo en el archivo de datos, en el siguiente ejemplo cambiaremos el separador de campo de espacio a «|»
$ awk 'BEGIN{OFS="|"}{print $1,$2,$3,$4,$5}' datafile
Eso es todo de este tutorial, espero que lo hayas encontrado informativo. Comparta sus comentarios y consultas en la sección de comentarios a continuación.
Lectura recomendada: 10 comandos de cola rápidos de Linux con ejemplos