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 + 0Awk 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"] = 1Il 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 1Ainsi 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 ""
}


