Tutoriel awk
Date de publication :
10/01/2005
Date de mise a jour :
V. Structures de contrôles
V-1. Introduction
V-2. Les décisions
V-3. Les boucles
V-3-a. Les boucles while
V-3-b. Les boucles for
V-4. Les sauts contrôlés
V-4-a. Les contrôles de boucles
V-4-b. Les contrôles du programme
V-5. Exemples
V-5-a. Le script PATH
V-5-b. le script STOCKAGE PASSWD
V-5-c. Le script REVERSE LINE
V. Structures de contrôles
V-1. Introduction
Le langage awk ne serait pas un langage complet si on ne pouvait
agir sur le déroulement du script. Ainsi awk dispose de structures de
contrôles.
Si vous avez déjà utilisé un langage comme le C, vous vous êtes déjà familiarisés
avec les structures qui sont quasiment toutes les mêmes (avec des rajouts).
Attention, les structures de contrôles ne peuvent être utilisées
en tant que condition première (ou critère).
V-2. Les décisions
L'expression if permet l'exécution d'une ou plusieurs
instructions en fonction de la réalisation de la condition.
Une condition se définit avec les opérateurs logiques et de
comparaisons. (cf. chapitre précédent)
if (condition)
instruction
Vous pouvez regrouper plusieurs instructions en utilisant
les accolades. L'expression if peut être suivie
d'une expression else qui sera réalisée si
l'expression if échoue.
if (condition)
{
instruction1
instruction2
}
else
{
instruction1
instruction2
}
V-3. Les boucles
V-3-a. Les boucles while
Awk dispose de deux types de boucles while. Voici leur syntaxe :
while (condition)
{
instructions
}
do
{
instructions
} while (condition)
La boucle do-while exécute les instructions une
fois avant de tester la condition. Par conséquent les
instructions sont exécutées au moins une fois contrairement
à la boucle while classique ou for.
V-3-b. Les boucles for
Comme pour les boucles while, il existe deux types
de boucles for :
for (instruction de début; condition; instruction de comptages)
{
instructions
}
for (variable in Tableau)
{
instructions
}
La première boucle for est la boucle classique présente
dans de nombreux langages de programmation (C, Perl, ...).
Elle peut être remplacée trés facilement par une boucle
while et inversement.
La seconde boucle est plus originale. Elle permet de parcourir
un tableau associatif. Un tableau associatif peut être
indexé par des chaînes de caractères. Il est donc beaucoup
plus difficile de parcourir le tableau. Par conséquent,
awk propose cette boucle (Elle permet de parcourir n'importe quel tableau.
Qu'il soit indexé par des nombres ou des caractères alphanumériques).
Malheureusement, les valeurs ne seront pas triées. Mais il
existe des méthodes pour trier que nous verrons plus tard.
V-4. Les sauts contrôlés
Les sauts contrôlés vont permettre d'interrompre un traitement.
Cependant awk ne dispose pas d'instructions tel le goto.
Elles rendent souvent le code confus. Cependant les sauts de
contrôles permettront de remplacer avantageusement le goto.
V-4-a. Les contrôles de boucles
Dans cette catégorie, ce sont les mots clés break et
continue qui sont utilisés.
- Le break permet de sortir de la boucle active,
- Le mot clé continue permet de faire un nouveau passage
dans la boucle (Les instructions après continue ne seront
pas prises en compte). Cependant le nouveau passage se fera
si et seulement si la condition est remplie.
Il faut savoir qu'il n'y a pas de moyen de sortir de deux boucles
imbriquées grâce à un seul break (ou de faire un continue).
Ces mots clés ne fonctionnent que sur la boucle active.
V-4-b. Les contrôles du programme
Cette catégorie est composée des mots clés next et exit.
Lorsque awk rencontre le mot clé next, il arrête le traitement
de l'enregistrement en cours et il passe au suivant. Tandis
que exit permet l'arrêt complet des traitements.
Awk exécute tout de même les blocs END. (Si vous mettez
un exit dans un bloc END, alors le programme s'arrête définitivement)
V-5. Exemples
V-5-a. Le script PATH
Ce script permet de récupérer le chemin d'un fichier à partir
d'un chemin complet (avec le fichier) :
script PATH
BEGIN {
FS="/"
}
{
path=""
for (i = 1; i < (NF); i++) {
path = path $i "/"
}
print path
}
Voici le résultat :
nyal $ cat fichier_test
./home/nyal/.xsession
./home/nyal/.Xdefault
/etc/rc.d/rc.modules
/etc/termcap
nyal $ cat fichier_test | ./path.awk
./home/nyal/
./home/nyal/
/etc/rc.d/
/etc/
V-5-b. le script STOCKAGE PASSWD
Ce script permet juste de montrer les possibilités des
tableaux associatifs. Il stocke les utilisateurs du fichier
passwd (/etc/paswd) avec son home (chemin du compte).
script STOCKAGE PASSWORD
BEGIN {
FS=":"
}
{
tabl_stock[$1] = $6
}
END {
for (name in tabl_stock) {
print "Nom : " name " | Home : " tabl_stock[name]
}
}
V-5-c. Le script REVERSE LINE
Ce script permet de renverser les champs d'un enregistrement :
script REVERSE LINE
{
reverse=""
i = NF
while (i > 0) {
reverse = reverse $i FS
i--
}
print reverse
}
Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur.
La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.
|