GNU/Linux >> Tutoriales Linux >  >> Linux

Tutorial de comandos Linux/UNIX Awk con ejemplos

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) Imprime 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, se usa el comando '{print;}' para imprimir todos los campos junto con sus valores.

2) Imprimir 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 utilizado 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) Encuentra la suma de todas las entradas de columnas específicas y añádela al final del archivo

Como ya comentamos, el comando awk puede hacer la suma de todos los números de una columna, por lo que 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 "Names\ttotal\tPPT\tDoc\txls"}{printf "%-s\t%d\t%d\t%d\t%d\n", $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.


Linux
  1. Linux expand Command Tutorial para principiantes (con ejemplos)

  2. Tutorial de comando de factor Linux para principiantes (con ejemplos)

  3. Tutorial de comando yes de Linux para principiantes (con ejemplos)

  4. Tutorial de comando Linux tac para principiantes (con ejemplos)

  5. Comando JQ en Linux con ejemplos

Tutorial de comandos de prueba de Linux para principiantes (con ejemplos)

Tutorial de comandos Linux zforce con ejemplos

Tutorial de comando Linux tr para principiantes (con ejemplos)

15 comandos ps de Linux con ejemplos

Comando awk de Linux con 10 ejemplos

Tutorial de comando de búsqueda de Linux (con ejemplos)