IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Tutoriel awk

Tutoriel awk


précédentsommairesuivant

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.

 
Sélectionnez
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 :

 
Sélectionnez
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 :

 
Sélectionnez
tableau[0] = "Hello"
tableau[1] = "World"
tableau["question"] = 1

Il est possible d'utiliser comme indexe une variable prédéfinie auparavant:

 
Sélectionnez
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 :

 
Sélectionnez
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 :

 
Sélectionnez
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 :

 
Sélectionnez
#! /usr/bin/awk -f

BEGIN {
    FS=":" # Changement du séparateur de champ
}
{
    print "Utilisateur : " $1
    print "Répertoire Courant : " $6
    print ""
}

précédentsommairesuivant

Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.