GNU/Linux >> Tutoriales Linux >  >> Linux

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

Este artículo es parte de la serie de tutoriales y ejemplos de Awk en curso. Como cualquier otro lenguaje de programación, Awk también tiene variables definidas por el usuario y variables integradas.

En este artículo, revisemos cómo definir y usar variables awk .

  • Las variables Awk deben comenzar con la letra, seguida de esta puede consistir en caracteres alfanuméricos o guiones bajos.
  • Las palabras clave no se pueden usar como una variable awk
  • Awk no admite la declaración de variables como otros lenguajes de programación
  • Siempre es mejor inicializar las variables awk en la sección BEGIN, que se ejecutará solo una vez al principio.
  • No hay tipos de datos en Awk. Que una variable awk se trate como un número o como una cadena depende del contexto en el que se utilice.

Ahora revisemos algunos ejemplos simples para aprender a usar variables awk definidas por el usuario.

Ejemplo 1 de Awk:Facturación de libros

En este ejemplo, el archivo de entrada bookdetails.txt contiene registros con campos:número de artículo, nombre del libro, cantidad y tarifa por libro.

$ cat bookdetails.txt
1 Linux-programming 2 450
2 Advanced-Linux 3 300
3 Computer-Networks 4 400
4 OOAD&UML 3 450
5 Java2 5 200

Ahora, el siguiente script de Awk lee y procesa el archivo bookdetails.txt anterior y genera un informe que muestra:la tasa de cada libro vendido y la cantidad total de todos los libros vendidos.

Hasta ahora hemos visto que Awk lee los comandos desde la línea de comandos, pero Awk también puede leer los comandos desde el archivo usando la opción -f.

Syntax:

$ awk -f script-filename inputfilename

Ahora nuestro script Awk para el cálculo de facturación de libros se muestra a continuación.

$ cat book-calculation.awk
BEGIN {
	total=0;
}
{
	itemno=$1;
	book=$2;
	bookamount=$3*$4;
	total=total+bookamount;
	print itemno," ", book,"\t","$"bookamount;
}
END {
	print "Total Amount = $"total;
}

En el guión anterior,

  • Awk Sección BEGIN inicializa el total variable. itemno, total, book, bookamount son variables awk definidas por el usuario.
  • En la acción de Awk sección, Cantidad*precio en libros se almacenará en una variable llamada cantidad en libros. Cada importe en libros se sumará al total.
  • Finalmente en el Awk FIN sección, la variable total tendrá la cantidad total.

Ahora ejecute el script book-calculation.awk para generar el informe que muestra cada tarifa de libro y el monto total como se muestra a continuación.

$ awk -f book-calculation.awk bookdetails.txt
1   Linux-programming 	 $900
2   Advanced-Linux 	 $900
3   Computer-Networks 	 $1600
4   OOAD&UML 	 $1350
5   Java2 	 $1000
Total Amount = $5750

Ejemplo 2 de Awk. Cálculo de la nota del estudiante

En este ejemplo, cree un archivo de entrada "student-marks.txt" con el siguiente contenido:nombre del estudiante, número de registro, puntuación de la prueba 1, puntuación de la prueba 2 y puntuación de la prueba 3.

$ cat student-marks.txt
Jones 2143 78 84 77
Gondrol 2321 56 58 45
RinRao 2122 38 37 65
Edwin 2537 78 67 45
Dayan 2415 30 47 20

Ahora, el siguiente script de Awk calculará y generará el informe para mostrar las calificaciones promedio de cada estudiante, el promedio de las calificaciones de Test1, Test2 y Test3.

$cat student.awk

BEGIN {
	test1=0;
	test2=0;
	test3=0;
	print "Name\tRollNo\t Average Score";

}
{
	total=$3+$4+$5;
	test1=test1+$3;
	test2=test2+$4;
	test3=test3+$5;
	print $1"\t"$2"\t",total/3;
}
END{
	print "Average of Test1="test1/NR;
	print "Average of Test2="test2/NR;
	print "Average of Test3="test3/NR;

}

En el script Awk anterior,

  • En el Awk BEGIN todas las variables awk se inicializan a cero. test1, test2, test3 y total son variables awk definidas por el usuario.
  • En la ACCIÓN Awk sección, $3, $4, $5 son puntajes de Test1, Test2 y Test3 respectivamente. La variable total es la suma de 3 puntajes de prueba para cada estudiante. La variable awk test1, test2 y test3 tiene las puntuaciones totales de cada prueba correspondiente.
  • Así que en el FIN Awk sección, dividir el total de cada prueba por el número total de registros (es decir, estudiante) le dará el puntaje promedio. NR es una variable incorporada de Awk que da el número total de registros en la entrada.

Ejemplo 3 de Awk. Informe HTML para los detalles del estudiante

En los dos ejemplos anteriores, hemos visto la variable awk que tiene números como valores. Este ejemplo muestra un script awk para generar el informe html para el nombre de los estudiantes y su número de registro.

$ cat string.awk
BEGIN{
title="AWK";
print "<html>\n<title>"title"</title><body bgcolor=\"#ffffff\">\n<table border=1><th  colspan=2 align=centre>Student Details</th>";

}
{
name=$1;
rollno=$2;
print "<tr><td>"name"</td><td>"rollno"</td></tr>";
   
}
END {
    print "</table></body>\n</html>";
}

Use el mismo archivo de entrada student-marks.txt que creamos en el ejemplo anterior.

$ awk -f string.awk student-marks.txt
<html>
<title>AWK</title><body bgcolor="#ffffff">
<table border=1><th  colspan=2 align=centre>Student Details</th>
<tr><td>Jones</td><td>2143</td></tr>
<tr><td>Gondrol</td><td>2321</td></tr>
<tr><td>RinRao</td><td>2122</td></tr>
<tr><td>Edwin</td><td>2537</td></tr>
<tr><td>Dayan</td><td>2415</td></tr>
</table></body>
</html>

Podemos almacenar la salida anterior, que da la siguiente tabla html. En el script anterior, la variable llamada name y rollno son variables de cadena, porque se usan en contexto de cadena.

Student Details
Jones 2143
Gondrol 2321
RinRao 2122
Edwin 2537
Dayan 2415

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.


Linux
  1. Tutorial de introducción de Awk:7 ejemplos de impresión de Awk

  2. Arreglos AWK explicados con 5 ejemplos prácticos

  3. Tutorial de estado de salida de Bash Shell con ejemplos prácticos

  4. Tutorial de referencia y desreferenciación de matrices de Perl con ejemplos prácticos

  5. Comando Echo con Ejemplos Prácticos

10 ejemplos prácticos de expresiones regulares con grep

Tutorial de Unix Sed:operación de archivos de varias líneas con 6 ejemplos prácticos

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

Tutorial de variables Bash:6 ejemplos prácticos de variables locales y globales de Bash

El tutorial Ultimate Tar Command con 10 ejemplos prácticos

Tutorial de funciones de Bash Shell con 6 ejemplos prácticos