Accueil
Accueil
Le
Club
Delphi
Kylix
C
C++
Java
J2EE
DotNET
& C#
Visual
Basic
Access
Pascal
Dev
Web
PHP
ASP
XML
UML
SQL
SGBD
Win
Linux
Autres

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
#! /usr/bin/awk -f 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
#! /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
#! /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 }


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.
Vos questions techniques : forum d'entraide PHP - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright 2000..2004 www.developpez.com