Tutoriel awk


précédentsommaire

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)

 
Sélectionnez

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.

 
Sélectionnez

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 :

 
Sélectionnez

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 :

 
Sélectionnez

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
Sélectionnez

#! /usr/bin/awk -f

BEGIN {
    FS="/"
}
{
    path=""
    for (i = 1; i < (NF); i++) {
       path = path $i "/"
    }
    print path
}

Voici le résultat :

 
Sélectionnez

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
Sélectionnez

#! /usr/bin/awk -f

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
Sélectionnez

#! /usr/bin/awk -f

# ENTRE : Comment allez vous ?
# SORTIE : ? vous allez Comment

{
    reverse=""
    i = NF
    while (i > 0) {
       reverse = reverse $i FS
       i--
    }
    print reverse
}

précédentsommaire

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

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.