Les variables et opérations sur les variables

Les actions Les structures de contrôle

La commande awk

Présentation

Les variables utilisateur

Les variables prédéfinies (système)

Opérations sur les variables

Les variables de champ

Présentation

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.

Les variables 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 (système)

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"

Opérations sur les variables

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

Les variables de champ

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    

Retour haut de la page