GNU/Linux >> Tutoriales Linux >  >> Linux

Tutorial de introducción de Awk:7 ejemplos de impresión de Awk

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

  1. Awk lee los archivos de entrada una línea a la vez.
  2. Para cada línea, coincide con el patrón dado en el orden dado, si coincide realiza la acción correspondiente.
  3. Si ningún patrón coincide, no se realizará ninguna acción.
  4. En la sintaxis anterior, el patrón de búsqueda o la acción son opcionales, pero no ambos.
  5. Si no se proporciona el patrón de búsqueda, Awk realiza las acciones indicadas para cada línea de la entrada.
  6. Si no se proporciona la acción, imprima todas las líneas que coincidan con los patrones dados, que es la acción predeterminada.
  7. Las llaves vacías sin ninguna acción no hacen nada. No realizará la operación de impresión predeterminada.
  8. 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

Sed y Awk 101 Hacks, por Ramesh Natarajan . Paso varias horas al día en un entorno UNIX/Linux lidiando con archivos de texto (datos, configuración y archivos de registro). Uso Sed y Awk para todo mi trabajo de manipulación de texto. Basado en mi experiencia con Sed y Awk, he escrito el libro electrónico Sed and Awk 101 Hacks que contiene 101 ejemplos prácticos sobre varias funciones avanzadas de Sed y Awk que mejorarán su vida en UNIX/Linux. Incluso si ha estado usando Sed y Awk durante varios años y no ha leído este libro, hágase un favor y lea este libro. Se sorprenderá con las capacidades de las utilidades Sed y Awk.

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

Linux
  1. Tutorial de comando cd de Linux para principiantes (8 ejemplos)

  2. Tutorial de Awk:Entienda las Variables de Awk con 3 Ejemplos Prácticos

  3. 4 Ejemplos de sentencias If de Awk (if, if else, if else if, :? )

  4. Ejemplos de comandos awk en Linux

  5. Ejemplos de comandos lpr en Linux

Tutorial de comando Linux w para principiantes (5 ejemplos)

Tutorial de comandos ss de Linux para principiantes (8 ejemplos)

Comando awk de Linux con 10 ejemplos

Tutorial de expresiones regulares para ejemplos de Linux (Sed y AWK)

Tutorial de ping:15 ejemplos efectivos de comandos ping

Tutorial de introducción a Bash Scripting con 5 ejemplos prácticos