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 :
#! /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
lancement 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-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 :
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 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
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. (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 :
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.
# 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"
}