Tutoriel awk


précédentsommairesuivant

II. Un programme awk

II-1. Fonctionnement

Awk fonctionne en lisant des données. Ces données peuvent être ainsi traitées par l'utilisateur. Utilisateur qui peut choisir de lire des données provenant de fichiers ou du canal de l'entrée standard (via un pipe par exemple).
Par conséquent, Awk a pour but premier de jouer un rôle de filtre bien qu'il ne se limite pas qu'à cela.

Nous allons maintenant présenter en détail les différentes façons de lancer un programme awk.
La première manière est d'insérer en haut du fichier awk une ligne qu'on nomme shebang dont voici la syntaxe :

 
Sélectionnez

#! /usr/bin/awk -f

Pour connaître le chemin de l'exécutable awk, il vous suffit d'utiliser la commande suivante sous votre Shell :

 
Sélectionnez

nyal bash $ which awk
/usr/bin/awk
nyal bash $

Il ne vous reste plus qu'à mettre les droits d'exécution au fichier et vous pourrez le lancer comme un exécutable.
Une autre méthode consiste à lancer le fichier en utilisant la commande awk sous un Shell avec l'option -f. Voici différents lancement possibles :

 
Sélectionnez

nyal bash $ awk -f fichier_awk < fichier_texte
nyal bash $ ls | awk -f fichier_awk

Maintenant que vous savez comment lancer un programme awk, nous allons expliquer la structure d'un programme.

II-2. Structure

Nous allons étudier comment awk nous permet de lire les données d'un fichier en expliquant les trois parties qui composent un programme en awk. Un programme Awk est composé de lignes de programmations ainsi que de lignes de commentaire. Les commentaires commencent après le caractère #.

II-2-a. Le coeur du programme

Ce coeur va être composé de conditions et d'actions qui vont être exécutées si la condition (ou critère) est remplie :

 
Sélectionnez

Condition { Action }
...
Condition { Action }

L'accolade ouvrante doit être sur la même ligne que la condition, sinon une erreur va être produite. Un moyen de l'éviter est de faire :

 
Sélectionnez

Condition \
  {
    Action
  }
...
Condition {
    Action
}

Voici donc d'autres syntaxes possibles. Vous pouvez bien entendu enchaîner les conditions/actions sur une même ligne. Et si une action ne possède pas de condition, elle est exécutée automatiquement.
Une condition est une expression qui va être analysée par awk. Si cette condition est réalisée alors l'action va être exécutée. Cette action peut correspondre à plusieurs instructions sur une ou plusieurs lignes. Si deux instructions se suivent sur la même ligne, il faut alors les séparer par un point-virgule :

 
Sélectionnez

1 < 2 {
    print "Hello World"
    print "Hello World 2"; print "Again" }

Maintenant nous allons voir comment awk exécute ce programme.

Awk va rappeler le coeur du programme qui est composé de critères/actions pour chaque enregistrement. Un enregistrement est représenté le plus souvent par une ligne. Par conséquent, si vous avez un fichier de 4 lignes que vous allez traiter, votre coeur du programme va être appelé quatre fois. Et pour chaque passage, c'est un nouvel enregistrement qui va être traité.

Bien sûr vous vous demandez comment accéder a l'enregistrement. Il y a pour cela un ensemble de variables à disposition, rempli par awk. Cela est expliqué en détail dans le chapitre suivant.
Il reste maintenant à expliquer les deux autres parties d'un programme en awk.

II-2-b. Le démarrage : BEGIN

Au démarrage d'un programme, awk peut exécuter des instructions avant le coeur du programme.
Ces instructions doivent être placées dans un bloc qui se nomme BEGIN

 
Sélectionnez

BEGIN {
    instructions
}

Il peut y avoir plusieurs blocs BEGIN. Ils seront exécutés les uns après les autres n'importe où dans le fichier :

 
Sélectionnez

BEGIN {
    print "démarrage1"
}
Coeur du programme
...
BEGIN \
{
    print "démarrage2"
}

Le bloc BEGIN doit être obligatoirement suivi de son accolade ouvrante sur la même ligne. (A moins d'utiliser le caractère backslash devant le retour chariot)
Les bloc BEGIN sont très utiles pour initialiser des variables et donc préparer la suite du programme.

II-3-c. La fin : END

Contrairement aux blocs BEGIN, les blocs END sont exécutés à la fin du programme. Une fois que tous les enregistrements ont été traités par le coeur du programme. Il possède les mêmes propriétés que le bloc BEGIN :

 
Sélectionnez

END {
    print "fin du programme";
}
END \
{
    print "C'est vraiment fini"
    print ".."
}

Les blocs END peuvent permettre d'afficher des résultats du coeur du programme ainsi que d'autres messages.

Vous savez maintenant comment se compose un programme Awk. Nous allons maintenant voir toutes les possibilités du langage.

 
Sélectionnez

# Format d'un programme awk

BEGIN {
    print "Démarrage du programme"
}

{ print "Pas de critères. Donc ce message s'affiche autant de fois qu'il y a d'enregistrement" }

END {
    print "Fin du programme"
}

précédentsommairesuivant

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.