III. Les variables▲
III-1. Les types▲
Awk est un langage non typé, c'est à dire que vous n'avez pas
besoin de déclarer les variables selon ce que vous voulez
stocker dedans. Ce système est donc différent de celui du C
pour permettre une plus grande souplesse.
Awk propose deux types de variables :
- Les variables utilisateur : variables simples et tableaux associatifs
- Les variables systèmes
Ces variables vous permettront de développer des programmes en réalisant des opérations arithmétiques, en stockant des données, ...
III-2. Utilisation▲
Une variable est composée de lettres, chiffres et soulignés
(underscore). La taille du nom n'est pas limitée mais le
premier caractère se doit d'être différent d'un chiffre.
Contrairement à un langage comme le C, les variables n'ont pas
besoin d'être déclarées et une place mémoire leur est réservée.
De plus, la variable est affectée soit de la valeur 0 ou d'une
chaîne vide "" selon le contexte par défaut.
Vous pouvez affecter à une variable des valeurs entières,
décimales et ascii.
variable1 =
2
variable_2 =
"Hello world"
variable_3 =
1
.56
Ce système de variable est géré par awk. Awk va décider
s'il faut selon le contexte convertir ou non la variable en
texte ou nombre.
Ainsi si la variable est utilisée pour une comparaison avec
du texte ou un affichage, elle sera convertie en texte. Et
si une chaîne de caractères (dans une variable aussi) est
employée dans une opération arithmétique, awk tentera la
conversion en une valeur numérique. Mais si cette conversion
est impossible (la chaîne commence par un caractère différent
d'un chiffre), awk affectera la valeur 0 pour la chaîne.
Par conséquent, vous pouvez savoir si une variable est de
type numérique en utilisant le système d'interprétation de awk :
i =
i +
0
# ou pour une condition aussi
i +
0
Awk va essayer de transformer la variable i en une valeur numérique. Et ainsi, si la variable commence par une valeur autre qu'un chiffre, la valeur 0va être affectée dans l'opération. Ce qui fera 0 + 0 et donc la condition ne sera pas remplie. La valeur 0 signifie que la condition n'est pas réalisée et que l'action ne sera pas exécutée.
III-3. Les tableaux associatifs▲
Les tableaux sont des variables qui associent des indexes avec des valeurs. Ces indexes peuvent être soit des nombres, soit des chaînes de caractères :
tableau[0
] =
"Hello"
tableau[1
] =
"World"
tableau["question"
] =
1
Il est possible d'utiliser comme indexe une variable prédéfinie auparavant:
val =
"question"
tableau[val] =
1
Awk possède des systèmes de boucles pour les tableaux associatifs.
Ils seront abordés dans le chapitre concernant les systèmes
de contrôle.
Enfin il n'y a pas de syntaxe permettant d'assigner plusieurs
valeurs à un tableau directement. De même les valeurs d'un
tableau ne peuvent redevenir indéfinies.
III-4. Les variables système▲
Awk découpe les enregistrements en champs. Les enregistrements
sont découpés selon les espaces et tabulations. Chaque champ
est affecté dans les variables $1, $2, $3 ... Le numéro
correspondant au nombre de champs de l'enregistrement. $0 permet
d'accéder à la totalité de l'enregistrement.
Pour travailler avec ces variables, le signe $ peut être suivi
d'une variable. La valeur définit alors le champ concerné
dans l'enregistrement :
i =
1
print
$i # Affiche le champ numéro 1
Ainsi vous pouvez utiliser la variable système NF pour afficher le dernier champ d'un enregistrement :
print
$NF
Variable | Descriptif | Valeur par défaut |
---|---|---|
ARGC | Cette variable contient le nombre d'arguments provenant de la ligne de commande. Les options au programme gawk ne sont pas prises en compte. | |
ARGIND | Cette variable permet de connaître quel fichier est en cours en traitement en contenant l'indexe de ARGV. | |
ARGV | Ce tableau contient les arguments de la ligne de commande.
Il est indexé de 0 à ARGC - 1. Vous pouvez changer dynamiquement le contenu du tableau. Cela a pour incidence de changer les fichiers en traitement par exemple. |
|
CONVFMT | La variable contient le format de conversion des nombres. | %.6g |
ENVIRON | Tableau contenant l'environnement courant. Les éléments
sont indexés par le nom des variables d'environnement ( ENVRION["PATH"] ). Si vous changez les valeurs du tableau, les programmes qui seront lancés par awk utiliseront toujours l'environnement de base. |
|
FILENAME | La variable contient le nom du fichier en cours de
traitement. Si aucun fichier n'est spécifié alors FILENAME
contient '-' et l'entrée standard est utilisée. FILENAME n'est pas encore défini dans les blocs BEGIN. |
|
FNR | La variable contient le numéro de l'enregistrement
pour le fichier courant. FNR reprend la valeur 1 si un nouveau fichier est traité. |
|
FS | contient la chaîne permettant la séparation des
champs. FS peut contenir une expression régulière. |
La caractére espace |
IGNORECASE | Cette variable permet de contrôler la casse pour les expressions régulières et les opérations sur les chaînes. Si IGNORECASE contient une valeur différente de 0 alors la casse n'est plus prise en compte. | 0 |
NF | La variable contient le nombre de champs pour un enregistrement. (Les champs sont séparés par des espaces et tabulations) | |
NR | NR contient le nombre total d'enregistrements depuis le début du script. | |
OFMT | Le format de sortie pour les nombres. | %.6g |
ORS | ORS contient la chaîne permettant la séparation
des enregistrements. La chaîne peut être constituée d'une multitude de caractères. |
\n |
SUBSEP | La variable contient le caractère utilisé pour séparer
les différents élément définissant un indexe du tableau. L'utilisation de cette variable sera primordiale pour l'émulation des tableaux multi dimensions. |
\034 (fs) |
III-5. Exemples▲
Ce script permet de changer le formatage d'affichage du fichier /etc/passwd :
#! /usr/bin/awk -f
BEGIN
{
FS
=
":"
# Changement du séparateur de champ
}
{
print
"Utilisateur : "
$1
print
"Répertoire Courant : "
$6
print
""
}