5.0 Maîtriser les variables intégrées d'AWK
5.1. Le rôle des variables intégrées
Les variables intégrées sont une fonctionnalité essentielle d'AWK, offrant un accès automatique aux informations relatives aux données d'entrée, à l'environnement d'exécution et à l'état du programme. Maîtriser leur utilisation est indispensable pour écrire des scripts AWK performants, concis et idiomatiques.
5.2. Variables AWK standard
- ARGC et ARGV ARGC contient le nombre d'arguments de la ligne de commande, tandis que ARGV est un tableau contenant les arguments eux-mêmes. Notez que ARGV[0] contient le nom de la commande, awk.
- NF (Nombre de champs) Cette variable contient le nombre total de champs de l'enregistrement actuel. Elle est recalculée pour chaque enregistrement lu.
- NR (Numéro d'enregistrement) Cette variable fait office de compteur global, stockant le nombre cumulé d'enregistrements traités depuis le début du script.
- FNR (Numéro de dossier) À l'instar de NR, FNR conserve le numéro d'enregistrement, mais celui-ci est réinitialisé à 1 pour chaque nouveau fichier d'entrée traité. Cela le rend indispensable pour les opérations sur plusieurs fichiers. Prenons l'exemple de deux fichiers : data1.txt contenant A\nB et data2.txt contenant C\nD.
- Notez que FNR se réinitialise à 1 pour data2.txt, tandis que NR continue de s'incrémenter.
- FS (Séparateur de champs) Définit le caractère ou l'expression régulière utilisée pour séparer les champs dans l'enregistrement d'entrée. La valeur par défaut est l'espace (un ou plusieurs espaces ou tabulations).
- RS (Séparateur d'enregistrements) Définit le caractère utilisé pour séparer les enregistrements en entrée. La valeur par défaut est un caractère de nouvelle ligne (\n).
- OFS (Séparateur de champ de sortie) Définit le séparateur placé entre les champs dans la sortie lors de l'utilisation de l'instruction print avec plusieurs arguments. La valeur par défaut est un espace.
- ORS (Séparateur d'enregistrements de sortie) Définit le séparateur placé à la fin de chaque enregistrement dans la sortie. La valeur par défaut est un caractère de nouvelle ligne (\n).
- NOM DE FICHIER Cette variable contient le nom du fichier d'entrée en cours de traitement.
- **$0 et n** Comme indiqué précédemment, `0 représente l'enregistrement actuel entier, tandis que n` (par exemple, `1, $2`) représente le nième champ de cet enregistrement.
- RSTART & RLENGTH Utilisé avec la fonction match(). Après une correspondance réussie, RSTART contient la position de départ (index) de la sous-chaîne correspondante, et RLENGTH contient sa longueur.
- CONVFMT & OFMT Ces variables contrôlent le format de conversion des nombres en chaînes de caractères (CONVFMT) et le format d'affichage des nombres imprimés (OFMT). La valeur par défaut est %.6g.
- SOUS-SEP Cette variable spécifie le séparateur d'indices utilisé pour simuler les tableaux multidimensionnels. La valeur par défaut est le caractère non imprimable \034.
- ENVIRONNEMENT Un tableau associatif qui permet d'accéder aux variables d'environnement du shell.
5.3. Variables spécifiques de GNU AWK (GAWK)
GAWK propose plusieurs extensions à la norme POSIX grâce à son propre ensemble de variables intégrées.
- ARGIND: L'index dans le tableau ARGV qui pointe vers le fichier en cours de traitement.
- IGNORECASSE: Si sa valeur est différente de zéro, active la correspondance de modèles insensible à la casse pour toutes les opérations d'expressions régulières.
- ERREUR: Lorsqu'une redirection ou une opération close() échoue, cette variable contient une chaîne de message d'erreur dépendante du système.
- LARGEURS DE CHAMP: Une liste de nombres séparés par des espaces qui indique à GAWK d'analyser les enregistrements en fonction de largeurs de champ fixes au lieu d'utiliser la variable FS.
- PELUCHEPermet un contrôle dynamique de l'analyse statique du code. Son activation active les avertissements concernant les constructions de code non portables ou douteuses.
- PROCINFO: Un tableau associatif contenant des informations sur le processus en cours d'exécution, telles que son ID de processus (PROCINFO["pid"]).
- DOMAINETEXTEUtilisé pour l'internationalisation, en spécifiant le domaine de texte pour la récupération des chaînes de caractères localisées du programme.
- MODE BIN: Utilisé sur les systèmes non POSIX pour spécifier le mode binaire des opérations d'E/S de fichiers.
Maintenant que nous comprenons comment AWK stocke les données et permet d'y accéder via des variables, la prochaine étape logique consiste à explorer les opérateurs utilisés pour manipuler ces données.