II. Un programme awk▲
II-A. 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 :
#! /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 :
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 lancements possibles :
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-B. 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 programmation ainsi que de lignes de commentaire. Les commentaires commencent après le caractère #.
II-B-1. Le cœur du programme▲
Ce cœur va être composé de conditions et d'actions qui vont être exécutées si la condition (ou critère) est remplie :
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 :
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 :
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 cœur 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 quatre lignes que vous allez traiter, votre cœur 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 à 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-B-2. Le démarrage : BEGIN▲
Au démarrage d'un programme, awk peut exécuter des instructions avant le cœur du programme.
Ces instructions doivent être placées dans un bloc qui se nomme BEGIN
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 :
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. (À moins d'utiliser le caractère backslash devant le retour chariot.)
Les blocs BEGIN sont très utiles pour initialiser des variables et donc préparer la suite du programme.
II-B-3. 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 cœur du programme. Il possède les mêmes propriétés que le bloc BEGIN :
END
{
print
"fin du programme"
;
}
END
\
{
print
"C'est vraiment fini"
print
".."
}
Les blocs END peuvent permettre d'afficher des résultats du cœur 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.
# 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"
}