Les variables et opérations sur les variables |
![]() |
![]() |
La commande awk |
Les variables prédéfinies (système)
On trouve les variables système et les variables utilisateurs. Les variables systèmes non modifiables donnent des informations sur le déroulement du programme. Les variables utilisateurs sont définies par l'utilisateur.
Le nom des variables est formé de lettres, de chiffres (sauf le premier caractère de la variable), d'underscore. Ce n'est pas nécessaire d'initialiser une variable, par défaut, si c'est un numérique, elle est égale à 0, si c'est une chaîne, elle est égale à une chaîne vide. Une variable peut contenir du texte, puis un chiffre, en fonction de son utilisation awk va déterminer son type (numérique ou chaîne).
Les variables prédéfinies sont les suivantes:
Variable | Signification | Valeur par défaut |
ARGC | nombre d'arguments de la ligne de commande | néant |
ARGIND | index du tableau ARGV du fichier courant | |
ARGV | tableau des arguments de la ligne de commande | néant |
CONVFMT | format de conversion pour les nombres | "%.6g" |
ENVIRON | tableau contenant les valeurs de l'environnement courant | |
ERRNO | contient une chaîne décrivant une erreur | "" |
FIELIWIDTHS | variable expérimentale à ne pas utiliser | |
FILENAME | nom du fichier d'entrée | néant |
FNR | numéro d'enregistrement dans le fichier courant | néant |
FS | contrôle le séparateur des champs d'entrée | " " |
IGNORECASE | contrôle les expressions régulières et les opérations sur les chaînes de caractères | 0 |
NF | nombre de champs dans l'enregistrement courant | néant |
NR | nombre d'enregistrements lus jusqu'alors | néant |
OFMT | format de sortie des nombres (nombre après la virgule) | "%.6g" |
OFS | séparateur des champs de sortie | " " |
ORS | séparateur des enregistrements de sortie | "\n" |
RLENGTH | longueur de la chaîne sélectionnée par le critère | néant |
RS | contrôle le séparateur des enregistrements d'entrée | "\n" |
RSTART | début de la chaîne sélectionnée par le critère | néant |
SUBSEP | séparateur d'indiçage | "\034" |
On peut manipuler les variables et leur faire subir certaines opérations. On trouve différents types d'opérateurs, les opérateurs arithmétiques classiques (+,-,*,/,%(modulo, reste de la division), ^ (puissance)), les opérateurs d'affectation (=,+=,-=,*=,/=,%=,^=). Exemples:
var=30 | affectation du chiffre 30 à var | |||
var="toto" | affectation de la chaîne toto à var | |||
var="toto " "est grand" | concaténation des chaînes "toto " et "est grand", résultat dans var | |||
var=var-valeur | var-=valeur | expressions équivalentes | ||
var=var+valeur | var+=valeur | expressions équivalentes | ||
var=var*valeur | var*=valeur | expressions équivalentes | ||
var=var/valeur | var/=valeur | expressions équivalentes | ||
var=var%valeur | var%=valeur | expressions équivalentes | ||
var=var+1 | var++ | expressions équivalentes | ||
var=var-1 | var-- | expressions équivalentes |
Comme on l'a déjà vu auparavant les champs d'un enregistrement (ligne) sont désignés par $1, $2,...$NF(dernier champ d'une ligne). L'enregistrement complet (ou ligne) est désigné par $0. Une variable champ est a les mêmes propriétés que les autres variables. Le signe $ peut être suivi par une variable, exemple:
i=3 | ||
print $(i+1) | affichage du champ 4 |
Lorsque $0 est modifié, automatiquement les variables de champs $1,..$NF sont redéfinies.
Quand l'une des variables de champ est modifée, $0 est modifié. ATTENTION le séparateur ne sera pas celui définit par FS mais celui définit par OFS (output field separator). Exemple:
awk 'BEGIN{print"Tous les utilisateurs du groupe users(GID 22) basculeront dans le groupe boulot(GID 24)";FS=":";OFS=":"} | |||
$4 != 22 {print $0} | Si le groupe n'est pas users on fait rien | ||
$4 ==22 {$4=24;print $0} | Si le groupe est 22, on lui réaffecte 24 | ||
END {print" C'est fini"}' /etc/passwd > passwd.essai |