III. Les variables▲
III-A. 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ème.
Ces variables vous permettront de développer des programmes en réalisant des opérations arithmétiques, en stockant des données…
III-B. 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 0 va ê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-C. Les tableaux associatifs▲
Les tableaux sont des variables qui associent des index avec des valeurs. Ces index 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 index 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-D. 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'index de ARGV. |
|
ARGV |
Ce tableau contient les arguments de la ligne de commande. Il est indexé de 0 à ARGC - 1. |
|
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 »] ). |
|
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. |
|
FNR |
La variable contient le numéro de l'enregistrement pour le fichier courant. |
|
FS |
contient la chaîne permettant la séparation des champs. |
Le 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. |
\n |
SUBSEP |
La variable contient le caractère utilisé pour séparer les différents éléments définissant un index du tableau. |
\034 (fs) |
III-E. 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
""
}