GNU/Linux >> Tutoriels Linux >  >> Linux

Tutoriel Awk :Comprendre les variables Awk avec 3 exemples pratiques

Cet article fait partie de la série Awk Tutorial and Examples en cours. Comme tous les autres langages de programmation, Awk possède également des variables définies par l'utilisateur et des variables intégrées.

Dans cet article, voyons comment définir et utiliser les variables awk .

  • Les variables Awk doivent commencer par la lettre, suivie de caractères alphanumériques ou de traits de soulignement.
  • Les mots clés ne peuvent pas être utilisés comme variable awk
  • Awk ne prend pas en charge la déclaration de variable comme les autres langages de programmation
  • Il est toujours préférable d'initialiser les variables awk dans la section BEGIN, qui ne seront exécutées qu'une seule fois au début.
  • Il n'y a pas de types de données dans Awk. Le fait qu'une variable awk soit traitée comme un nombre ou comme une chaîne dépend du contexte dans lequel elle est utilisée.

Passons maintenant en revue quelques exemples simples pour apprendre à utiliser les variables awk définies par l'utilisateur.

Awk Exemple 1 :Facturation des livres

Dans cet exemple, le fichier d'entrée bookdetails.txt contient des enregistrements avec des champs :numéro d'article, nom du livre, quantité et tarif par livre.

$ 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

Maintenant, le script Awk suivant lit et traite le fichier bookdetails.txt ci-dessus et génère un rapport qui affiche le taux de chaque livre vendu et le montant total pour tous les livres vendus.

Jusqu'à présent, nous avons vu qu'Awk lit les commandes à partir de la ligne de commande, mais Awk peut également lire les commandes à partir du fichier en utilisant l'option -f.

Syntax:

$ awk -f script-filename inputfilename

Maintenant, notre script Awk pour le calcul de la facturation des livres est donné ci-dessous.

$ 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;
}

Dans le script ci-dessus,

  • Awk Section DÉBUT initialise la variable total. itemno, total, book, bookamount sont des variables awk définies par l'utilisateur.
  • Dans l'action d'Awk section, Quantity*bookprice sera stocké dans une variable appelée bookamount. Chaque montant sera ajouté au total.
  • Enfin dans l'Awk END section, la variable totale aura le montant total.

Exécutez maintenant le script book-calculation.awk pour générer le rapport qui affiche chaque tarif de réservation et le montant total, comme indiqué ci-dessous.

$ 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

Awk Exemple 2. Calcul de la note de l'élève

Dans cet exemple, créez un fichier d'entrée "student-marks.txt" avec le contenu suivant :nom de l'étudiant, numéro de liste, score Test1, score Test2 et score Test3.

$ 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

Maintenant, le script Awk suivant calculera et générera le rapport pour afficher les notes moyennes de chaque élève, la moyenne des scores Test1, Test2 et 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;

}

Dans le script Awk ci-dessus,

  • Dans le Awk BEGIN section toutes les variables awk sont initialisées à zéro. test1, test2, test3 et total sont des variables awk définies par l'utilisateur.
  • Dans l'ACTION Awk section, $3, $4, $5 sont respectivement les scores Test1, Test2 et Test3. la variable totale est l'addition de 3 scores aux tests pour chaque élève. La variable awk test1, test2 et test3 contient les scores totaux de chaque test correspondant.
  • Donc dans le Awk END section, en divisant chaque total de test par le nombre total d'enregistrements (c'est-à-dire étudiant) vous donnera le score moyen. NR est une variable intégrée Awk qui donne le nombre total d'enregistrements en entrée.

Awk Exemple 3. Rapport HTML pour les détails de l'étudiant

Dans les deux exemples ci-dessus, nous avons vu la variable awk qui a des nombres comme valeurs. Cet exemple montre un script awk pour générer le rapport html pour le nom des étudiants et leur numéro de matricule.

$ 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>";
}

Utilisez le même fichier d'entrée student-marks.txt que nous avons créé dans l'exemple ci-dessus.

$ 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>

Nous pouvons stocker la sortie ci-dessus, ce qui donne le tableau html suivant. Dans le script ci-dessus, les variables nommées name et rollno sont des variables de chaîne, car elles sont utilisées dans un contexte de chaîne.

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

Lecture recommandée

Sed et Awk 101 Hacks, par Ramesh Natarajan . Je passe plusieurs heures par jour sur un environnement UNIX / Linux à gérer des fichiers texte (fichiers de données, de configuration et de journalisation). J'utilise Sed et Awk pour tout mon travail de manipulation de texte. Sur la base de mon expérience Sed et Awk, j'ai écrit Sed and Awk 101 Hacks eBook qui contient 101 exemples pratiques sur diverses fonctionnalités avancées de Sed et Awk qui amélioreront votre vie UNIX / Linux. Même si vous utilisez Sed et Awk depuis plusieurs années et que vous n'avez pas lu ce livre, rendez-vous service et lisez ce livre. Vous serez étonné des capacités des utilitaires Sed et Awk.


Linux
  1. Tutoriel d'introduction Awk - 7 exemples d'impression Awk

  2. Les tableaux AWK expliqués avec 5 exemples pratiques

  3. Tutoriel sur l'état de sortie de Bash Shell avec des exemples pratiques

  4. Tutoriel de référence et de déréférencement des tableaux Perl avec des exemples pratiques

  5. Commande d'écho avec des exemples pratiques

10 exemples pratiques de regex avec grep

Tutoriel Unix Sed :Opération de fichiers multilignes avec 6 exemples pratiques

Tutoriel d'introduction aux scripts Bash avec 5 exemples pratiques

Tutoriel sur les variables Bash - 6 exemples pratiques de variables globales et locales Bash

Le didacticiel Ultimate Tar Command avec 10 exemples pratiques

Tutoriel sur les fonctions Bash Shell avec 6 exemples pratiques