Se connecter
Se connecter
Inscription
Mot de passe perdu
Connexion:
[Actualités]
Nvidia prévient d'une pénurie de GPU ce trimestre, avec une reprise début 2025
[Actualités]
Les Technos #469 : Un jour sans fin
[Actualités]
Test Farming Simulator 25 (PS5) - Des innovations intéressantes mais des perfor...
[Actualités]
Qualcomm souhaite réduire davantage les prix des PC Windows basés sur ARM
[Actualités]
Finalement, Google préparerait une nouvelle tablette mais la Pixel Tablet 2 ser...
[Actualités]
Windows 10 version 22H2 : erreur de mise à jour et de désinstallation
[Actualités]
OpenAI prépare désormais son propre navigateur
[Actualités]
WhatsApp bat Telegram : les transcriptions des messages vocaux arrivent pour tou...
[Actualités]
Unreal et Unreal Tournament désormais gratuits sur Internet Archive
[Actualités]
Windows 10 : Microsoft affiche des publicités en plein écran pour les PC équi...
[Articles]
Dungeons 4 - Nintendo Switch Edition
[Articles]
The Bridge Curse 2 : The Extrication
[Articles]
Farmagia
[Articles]
I*CHU: Chibi Edition
[Articles]
Farming Simulator 25
[Articles]
Goblin Slayer -Another Adventurer- Nightmare Feast
[Articles]
Deel lance des programmes en marque blanche et pour les revendeurs pour plus de ...
[Articles]
ESET Research : WolfsBane, nouvelle porte dérobée de cyber-espionnage Linux cr...
[Articles]
Devoteam présente son nouveau plan stratégique « AMPLIFY » avec un fort acce...
[Articles]
LEGO Horizon Adventures
Actualités
Lettre d'information
Proposer une actualité
Archives
Actualités
Articles
Programmation
Press Release
Matériel
Logiciels
Livres
Interviews
Derniers commentaires
Jeux Vidéos
XBox One
XBox 360
Wii U
PSP
PS4
PS3
PC
DS
GameCube
3DS
Forum
Derniers messages
Informatique
Fun
Divers
Logithèque
Blogs
Divers
A Propos
Annonceurs
Contact
Recherche
RSS
Editer un article
Titre
Mots Clés
Texte
[size=18] [b]Nom[/b] [/size] gawk - Langage d'examen et de traitement de motifs. [size=18] [b]Résumé[/b] [/size] [b]gawk[/b] [ options de style *(PX ou GNU ] [b]-f[/b] [i]fichier-programme[/i] [ [b]-^-[/b] ] fichier .^.^. [b][/b] [b]gawk[/b] [ options de style *(PX ou *(GN ] [ [b]-^-[/b] ] [i]texte-programme[/i] fichier .^.^. [b]pgawk[/b] [ options de style *(PX ou *(GN ] [b]-f[/b] [i]fichier-programme[/i] [ [b]-^-[/b] ] fichier ... [b][/b] [b]pgawk[/b] [ options de style *(PX ou *(GN ] [ [b]-^-[/b] ] [i]texte-programme[/i] fichier ... [size=18] [b]Description[/b] [/size] [i]gawk[/i] est l'implémentation du projet *(GN du langage de programmation *(AK. Elle est conforme à la définition du langage édictée par le Standard *(PX 1003.2 des Langages de Commandes et Utilitaires. Cette version est également basée sur la description donnée dans [b]The AWK Programming Language ,[/b] de Aho, Kernighan, et Weinberger, avec les fonctionnalités supplémentaires trouvées dans la version System V Release 4 du [b]awk[/b] *(UX. [i]gawk[/i] fournit également les extensions [i]awk[/i] plus récentes des Laboratoires Bell, et quelques extensions spécifiques *(GN. [i]pgawk[/i] est la version de profilage de [b]gawk .[/b] Elle est identique en tout point à [b]gawk ,[/b] à l'exception près que les programmes s'exécutent plus lentement, et qu'elle produit automatiquement un profil d'exécution dans le fichier [b]awkprof.out[/b] quand elle a fini. Voyez l'option [b]-^-profile[/b] plus bas. La ligne de commandes est constituée des options de [i]gawk[/i] lui-même, du texte du programme *(AK (s'il n'est pas fourni par une option [b]-f[/b] ou [b]-^-file ),[/b] et des valeurs à rendre disponibles dans les variables *(AK prédéfinies [b]ARGC[/b] et [b]ARGV .[/b] [size=18] [b]Options[/b] [/size] Les options de [i]gawk[/i] peuvent être soit les options traditionnelles d'une lettre *(PX, soit les options longues du type *(GN. Les options *(PX commencent par un unique « - », alors que les options longues débutent par « -^- ». Les options longues sont fournies à la fois pour des fonctionnalités spécifiques à *(GN, et pour des fonctionnalités mandatées par *(PX. Suivant le standard *(PX, les options spécifiques à [i]gawk[/i] sont fournies via des arguments à l'option [b]-W.[/b] De multiples options [b]-W[/b] peuvent être fournies. Chaque option [b]-W[/b] a une option longue correspondante, comme détaillé ci-dessous. Les arguments des options longues sont soit liés à l'option via un [b]=[/b] , sans espaces, soit peuvent être fournis comme argument suivant sur la ligne de commandes. Les options longues peuvent être abrégées, pour autant que l'abréviation reste unique. [size=18] [b]Options[/b] [/size] [i]gawk[/i] accepte les options suivantes, listées alphabétiquement : [/col][/row][/table] [b][i]-F sc[/i][/b] [/col][/row][/table] [b][i]-^-field-separator sc[/i][/b] [table][row][col] [/col][col]Utiliser [i]sc[/i] en tant que séparateur de champs (la valeur de la variable prédéfinie [b]FS ).[/b] [/col][/row][/table] [table][row][col] [/col][col][b][/b]-v[i][/i] var[b][/b]^=^[i]val[/i] [/col][/row][/table] [table][row][col] [/col][col][b][/b]-^-assign [i]var[/i][b][/b]^=^[i]val[/i] Affecter la valeur [b]val[/b] à la variable [b]var ,[/b] avant que l'exécution du programme ne débute. De telles valeurs de variables sont accessibles au bloc [b]BEGIN[/b] d'un programme *(AK. [/col][/row][/table] [b][i]-f fichier-programme[/i][/b] [/col][/row][/table] [b][i]-^-file fichier-programme[/i][/b] [table][row][col] [/col][col]Lire le source du programme *(AK à partir du fichier [b]fichier-programme ,[/b] au lieu du premier argument de la ligne de commandes. De multiples options [b]-f[/b] (ou [b]-^-file )[/b] peuvent être utilisées. [/col][/row][/table] [b][i]-mf NNN[/i][/b] [/col][/row][/table] [b][i]-mr NNN[/i][/b] [table][row][col] [/col][col]Spécifier des limites de mémoire variées à la valeur [b]NNN .[/b] Le drapeau [b]f[/b] fixe le nombre maximal de champs, et le drapeau [b]r[/b] fixe la taille d'enregistrement maximale. Ces deux drapeaux et l'option [b]-m[/b] proviennent de la version de recherche des Laboratoires Bell du [b]awk[/b] *(UX. Elles sont ignorées par [b]gawk ,[/b] car [i]gawk[/i] n'a pas de limites prédéfinies. [/col][/row][/table] [b]-W compat[/b] [/col][/row][/table] [b]-W traditional[/b] [/col][/row][/table] [b]-^-compat[/b] [/col][/row][/table] [b]-^-traditional[/b] [table][row][col] [/col][col]Exécuter en mode de [b]compatibilité .[/b] En mode de compatibilité, [i]gawk[/i] se comporte identiquement au [b]awk[/b] *(UX ; aucune des extensions spécifiques *(GN n'est reconnue. L'utilisation de [b]-^-traditional[/b] est préférée aux autres formes de cette option. Voyez [b]EXTENSIONS GNU[/b] ci-dessous pour de plus amples informations. [/col][/row][/table] [b]-W copyleft[/b] [/col][/row][/table] [b]-W copyright[/b] [/col][/row][/table] [b]-^-copyleft[/b] [/col][/row][/table] [b]-^-copyright[/b] [table][row][col] [/col][col]Afficher la version courte du message d'information sur le copyright *(GN sur la sortie standard, et se terminer avec succès. [/col][/row][/table] [table][row][col] [/col][col][b][/b]-W dump-variables[[b]=[/b][i]fichier[/i]] [/col][/row][/table] [table][row][col] [/col][col][b][/b]-^-dump-variables[[b]=[/b][i]fichier[/i]] Imprimer une liste triée des variables globales, de leur type et valeur finale dans [b]fichier .[/b] Si aucun [i]fichier[/i] n'est fourni, [i]gawk[/i] utilise un fichier nommé [i]awkvars.out[/i] dans le répertoire courant. .5 Disposer d'une liste de toutes les variables globales est un bon moyen pour rechercher des erreurs typographiques dans vos programmes. Vous devriez également utiliser cette option si vous avez un gros programme avec un tas de fonctions, et que vous voulez vous assurer que vos fonctions n'utilisent pas par inadvertance des variables globales que vous pensiez être locales. (C'est une erreur particulièrement facile à commettre avec des noms de variables simples comme [b]i ,[/b] [b]j ,[/b] etc.) [/col][/row][/table] [b]-W help[/b] [/col][/row][/table] [b]-W usage[/b] [/col][/row][/table] [b]-^-help[/b] [/col][/row][/table] [b]-^-usage[/b] [table][row][col] [/col][col]Afficher un résumé relativement court des options disponibles sur la sortie standard. (Selon les [b]Standards de Codage GNU ,[/b] ces options provoquent un arrêt immédiat, avec succès.) [/col][/row][/table] [b]-W lint [ =fatal ][/b] [/col][/row][/table] [b]-^-lint [ =fatal ][/b] [table][row][col] [/col][col]Émettre des avertissements sur des constructions qui sont douteuses ou non portables sur d'autres implémentations *(AK. Avec l'argument optionnel [b]fatal ,[/b] les avertissements de lint deviennent fatals. Cela peut sembler drastique, mais son utilisation encouragera certainement le développement de programmes *(AK plus propres. [/col][/row][/table] [b]-W lint-old[/b] [/col][/row][/table] [b]-^-lint-old[/b] [table][row][col] [/col][col]Émettre des avertissements sur des constructions qui ne sont pas portables sur la version originale de [i]l' awk Unix.[/i] [/col][/row][/table] [b]-W gen-po[/b] [/col][/row][/table] [b]-^-gen-po[/b] [table][row][col] [/col][col]Analyser lexicalement et syntaxiquement le programme *(AK, et générer un fichier au format *(GN [b]&.po[/b] sur la sortie standard contenant les entrées de toutes les chaînes locale-isables du programme. Le programme lui-même n'est pas exécuté. Voyez la distribution de *(GN [i]gettext[/i] pour plus d'informations sur les fichiers [b].po .[/b] [/col][/row][/table] [b]-W non-decimal-data[/b] [/col][/row][/table] [b]-^-non-decimal-data[/b] [table][row][col] [/col][col]Reconnaître les valeurs octales et hexadécimales dans les données d'entrée. [i]Utilisez cette option avec une extrême prudence ![/i] .ig [/col][/row][/table] [b]-W nostalgia[/b] [/col][/row][/table] [b]-^-nostalgia[/b] [table][row][col] [/col][col]Fournir un moment de nostalgie aux utilisateurs d' [i]awk[/i] de longue date. .. [/col][/row][/table] [b]-W posix[/b] [/col][/row][/table] [b]-^-posix[/b] [table][row][col] [/col][col]Ceci active le mode de [i]compatibilité[/i] avec les restrictions additionnelles suivantes :[table][row][col] [/col][col] [table][row][col] [/col][col](bu les séquences d'échappement [b]ex[/b] ne sont pas reconnues.[/col][/row][/table] [table][row][col] [/col][col](bu Seules les espaces et les tabulations peuvent servir de séparateurs de champs quand [b]FS[/b] est fixé à une espace unique ; les retours à la ligne (en) ne le peuvent pas.[/col][/row][/table] [table][row][col] [/col][col](bu Vous ne pouvez continuer les lignes après [b]?[/b] ou [b]: .[/b][/col][/row][/table] [table][row][col] [/col][col](bu Le synonyme [b]func[/b] du mot-clé [b]function[/b] n'est pas reconnu.[/col][/row][/table] [table][row][col] [/col][col](bu Les opérateurs [b]**[/b] et [b]**=[/b] ne peuvent être utilisés en remplacement de [b]^[/b] et [b]^= .[/b][/col][/row][/table] [table][row][col] [/col][col](bu La fonction [b]fflush()[/b] n'est pas disponible.[/col][/row][/table][/col][/row][/table] [/col][/row][/table] [table][row][col] [/col][col][b][/b]-W profile[[b]=[/b][i]fichier_prof[/i]] [/col][/row][/table] [table][row][col] [/col][col][b][/b]-^-profile[[b]=[/b][i]fichier_prof[/i]] Envoyer des données de profilage dans [b]fichier_prof .[/b] Le défaut est [b]awkprof.out .[/b] Lorsqu'il est exécuté avec [b]gawk ,[/b] le profil est simplement une version « joliment affichée » du programme. Lorsqu'il est exécuté avec [b]pgawk ,[/b] le profil contient le nombre d'exécutions de chaque instruction du programme dans la marge gauche et le nombre d'appels de fonction pour chaque fonction définie par l'utilisateur. [/col][/row][/table] [b]-W re-interval[/b] [/col][/row][/table] [b]-^-re-interval[/b] [table][row][col] [/col][col]Permettre l'utilisation [i]d' expressions d'intervalles[/i] dans la reconnaissance des expressions rationnelles (voyez [b]Expressions Rationnelles[/b] plus bas). Les expressions d'intervalle n'étaient pas traditionnellement disponibles dans le langage *(AK. Le standard *(PX les y a ajoutées, pour rendre [i]awk[/i] et [i]egrep[/i] cohérents l'un avec l'autre. Néanmoins, leur usage va probablement empêcher les anciens programmes *(AK de fonctionner correctement, et [i]gawk[/i] ne les fournit donc que si elles sont requises avec cette option ou si [b]-^-posix[/b] est spécifié. [/col][/row][/table] [b][i]-W source texte-programme[/i][/b] [/col][/row][/table] [b][i]-^-source texte-programme[/i][/b] [table][row][col] [/col][col]Utiliser [i]texte-programme[/i] comme code source du programme *(AK. Cette option permet le mélange de fonctions de bibliothèques (utilisées via les options [b]-f[/b] et [b]-^-file )[/b] avec le code source entré sur la ligne de commandes. C'est prévu principalement pour les programmes *(AK moyens à grands utilisés dans les scripts shell. [/col][/row][/table] [b]-W version[/b] [/col][/row][/table] [b]-^-version[/b] [table][row][col] [/col][col]Afficher des informations sur la version de [i]gawk[/i] utilisée par cette copie sur la sortie standard. C'est utile principalement pour savoir si la copie actuelle de [i]gawk[/i] présente sur votre système est à jour par rapport à celle distribuée par la Free Software Foundation. C'est également utile lorsque vous reportez des bogues. (Selon les [b]Standards de Codage GNU ,[/b] ces options provoquent un arrêt immédiat, avec succès.) [b]-^-[/b] [table][row][col] [/col][col]Signaler la fin des options. C'est utile pour permettre à des arguments ultérieurs du programme *(AK lui-même de débuter par un « - ». C'est utilisé principalement pour la cohérence avec la convention d'analyse syntaxique des arguments utilisée par la plupart des autres programmes *(PX.[/col][/row][/table] Dans le mode de compatibilité, toute autre option est marquée comme étant invalide, mais est ignorée dans les autres cas. En temps normal, aussi longtemps que le texte du programme est fourni, les options non reconnues sont passées au programme *(AK dans le tableau [b]ARGV[/b] pour être traitées. Ceci est particulièrement utile pour exécuter des programmes via le mécanisme « #! » d'interpréteur exécutable. [size=18] [b]ExÉcution dun programme awk[/b] [/size] Un programme *(AK est constitué d'une séquence d'instructions motif-action et de définitions optionnelles de fonctions.[table][row][col] [/col][col] [i]motif[/i][b] {[/b] [i]instructions[/i] d'action[b][/b] } [b][/b] [b]function[/b] [i]nom[/i][b]([/b][i]liste[/i] de paramètres[b])[/b] { [i]instructions[/i][b][/b] }[/col][/row][/table] [i]gawk[/i] lit d'abord le source du programme à partir du (des) [b]fichier(s)-programme(s)[/b] éventuel(s), des arguments de [b]-^-source ,[/b] ou du premier argument non option sur la ligne de commandes. Les options [b]-f[/b] et [b]-^-source[/b] peuvent être utilisées plusieurs fois sur la ligne de commandes. [i]gawk[/i] lit le texte du programme comme si tous les [b]fichiers-programmes[/b] avaient été concaténés ensemble. C'est utile pour la construction de bibliothèques de fonctions *(AK, sans avoir à les inclure dans chaque nouveau programme *(AK qui les utilise. Cela permet également de mélanger des fonctions de bibliothèques avec des programmes de ligne de commande. La variable d'environnement [b]AWKPATH[/b] spécifie un chemin de recherche à utiliser pour trouver les fichiers sources nommés avec l'option [b]-f .[/b] Si cette variable n'existe pas, le chemin par défaut est [b]«[/b] .:/usr/local/share/awk ». (Le répertoire réel peut varier, en fonction de la façon dont [i]gawk[/i] a été construit et installé.) Si un nom de fichier donné à l'option [b]-f[/b] contient un caractère « / » , aucune recherche de chemin n'est effectuée. [i]gawk[/i] exécute les programmes *(AK dans l'ordre suivant. D'abord, toutes les affectations de variables spécifiées par l'option [b]-v[/b] sont effectuées. Ensuite, [i]gawk[/i] compile le programme dans une forme interne. Après cela, [i]gawk[/i] exécute le code du (des) bloc(s) [b]BEGIN[/b] (s'il y en a), et poursuit en lisant chaque fichier nommé dans le tableau [b]ARGV .[/b] S'il n'y a aucun fichier nommé sur la ligne de commandes, [i]gawk[/i] lit l'entrée standard. Si un nom de fichier sur la ligne de commandes a la forme [b][i]var = val ,[/i][/b] il est traité comme une affectation de variable. La variable [i]var[/i] se verra affecter la valeur [b]val .[/b] (Cela se produit après l'exécution de l'entièreté des blocs [b]BEGIN .)[/b] L'affectation de variables en ligne de commandes est principalement utile pour affecter dynamiquement des valeurs aux variables qu'utilise *(AK pour contrôler la façon dont l'entrée est découpée en champs et en enregistrements. Elle est également utile pour contrôler l'état si plusieurs passes sont nécessaires sur un unique fichier de données. Si la valeur d'un élément particulier de [b]ARGV[/b] est vide ([b]""[/b]), [i]gawk[/i] l'ignore. Pour chaque enregistrement en entrée, [i]gawk[/i] vérifie s'il correspond à un des [i]motifs[/i] du programme *(AK. Pour chaque motif convenant à l'enregistrement, [i]l' action[/i] associée est exécutée. Les motifs sont testés dans leur ordre d'apparition dans le programme. Finalement, après que toute l'entrée a été épuisée, [i]gawk[/i] exécute le code du (des) bloc(s) [b]END[/b] (s'il y en a). [size=18] [b]Variables, enregistrements et champs[/b] [/size] Les variables *(AK sont dynamiques ; elles commencent leur existence quand elles sont utilisées pour la première fois. Leurs valeurs sont soit des nombres flottants, soit des chaînes de caractères, soit les deux, en fonction de la façon dont elles sont utilisées. *(AK dispose également des tableaux à une dimension ; les tableaux à plus d'une dimension peuvent être simulés. Plusieurs variables prédéfinies sont réglées quand un programme s'exécute ; celles-ci seront décrites au moment voulu et sont résumées ci-après. [b]Enregistrements[/b] Normalement, les enregistrements sont séparés par des caractères de saut de ligne. Vous pouvez contrôler la façon dont les enregistrements sont séparés en affectant des valeurs à la variable prédéfinie [b]RS .[/b] Si [b]RS[/b] est un caractère unique quelconque, celui-ci séparera les enregistrements. Sinon, [b]RS[/b] est une expression rationnelle. Le texte en entrée qui correspond à cette expression rationnelle découpera l'enregistrement. Néanmoins, dans le mode de compatibilité, seul le premier caractère de la chaîne est utilisé pour séparer les enregistrements. Si on affecte à [b]RS[/b] la chaîne vide, alors les enregistrements sont séparés par des lignes blanches. Quand la valeur de [b]RS[/b] est la chaîne vide, alors le caractère de saut de ligne agit toujours comme un séparateur de champ, en plus de la valeur de [b]FS .[/b] [b]Champs[/b] Quand un enregistrement d'entrée est lu, [i]gawk[/i] le découpe en [b]champs ,[/b] en utilisant la valeur de la variable [b]FS[/b] comme séparateur de champs. Si [b]FS[/b] est un caractère unique, les champs sont séparés par celui-ci. Si [b]FS[/b] est la chaîne vide, alors chaque caractère individuel devient un champ séparé. Sinon, [b]FS[/b] est supposé être une expression rationnelle complète. Dans le cas spécial où [b]FS[/b] est une espace unique, les champs sont séparés par des tas d'espaces et/ou de tabulations et/ou de sauts de ligne. (Mais voyez la discussion sur [b]--posix ,[/b] plus bas). Notez que la valeur de [b]IGNORECASE[/b] (voir ci-dessous) affectera également la façon dont les champs sont découpés quand [b]FS[/b] est une expression rationnelle, et la façon dont les enregistrements seront séparés quand [b]RS[/b] est une expression rationnelle. Si on affecte à la variable [b]FIELDWIDTHS[/b] une liste de nombres séparés par des espaces, chaque champ est supposé avoir une longueur fixe, et [i]gawk[/i] découpera l'enregistrement en utilisant les longueurs spécifiées. La valeur de [b]FS[/b] est ignorée. Affecter une nouvelle valeur à [b]FS[/b] passe outre l'utilisation de [b]FIELDWIDTHS ,[/b] et restaure le comportement par défaut. Chaque champ de l'enregistrement d'entrée peut être référencé par sa position : [b]$1 ,[/b] [b]$2 ,[/b] etc. [b]$0[/b] est l'enregistrement complet. Les champs ne doivent pas forcément être référencés par des constantes :[table][row][col] [/col][col] .ft B n = 5 [b][/b] print $n .ft R[/col][/row][/table] imprime le cinquième champ de l'enregistrement d'entrée. La variable [b]NF[/b] contient le nombre total de champs de l'enregistrement d'entrée. Les références à des champs non existants (c.-à-d. les champs situés après [b]$NF )[/b] produiront la chaîne vide. Néanmoins, affecter vers un champ non existant (p. ex. [b]$(NF+2) = 5 )[/b] augmente la valeur de [b]NF ,[/b] crée tous les champs interposés avec la chaîne vide comme valeur, et force à recalculer la valeur de [b]$0 ,[/b] les champs étant séparés par la valeur de [b]OFS .[/b] Les références à des champs de numéro négatif provoquent une erreur fatale. Décrémenter [b]NF[/b] force l'abandon des valeurs des champs suivant la nouvelle valeur, et le recalcul de la valeur de [b]$0 ,[/b] les champs étant séparés par la valeur de [b]OFS .[/b] Affecter une valeur à un champ existant provoque la reconstruction de l'enregistrement complet quand [b]$0[/b] est référencé. De façon similaire, affecter une valeur à [b]$0[/b] provoque le redécoupage de l'enregistrement, en créant de nouvelles valeurs pour les champs. [b]Variables prédéfinies[/b] Les variables prédéfinies de [b]gawk[/b] sont : [b]ARGC[/b] [table][row][col] [/col][col]Le nombre d'arguments sur la ligne de commandes (n'inclut pas les options de [b]gawk ,[/b] ni le source du programme).[/col][/row][/table] [b]ARGIND[/b] [table][row][col] [/col][col]La position dans [b]ARGV[/b] du fichier en cours de traitement.[/col][/row][/table] [b]ARGV[/b] [table][row][col] [/col][col]Tableau des arguments de la ligne de commandes. Le tableau est indexé de 0 à [b]ARGC[/b] - 1. Changer dynamiquement le contenu de [b]ARGV[/b] peut contrôler les fichiers utilisés pour les données.[/col][/row][/table] [b]BINMODE[/b] [table][row][col] [/col][col]Sur les systèmes non POSIX, spécifie l'utilisation du mode « binaire » pour toutes les E/S de fichier. Des valeurs numériques de 1, 2 ou 3 spécifient que les fichiers d'entrée, les fichiers de sortie ou tous les fichiers, respectivement, devraient utiliser les E/S binaires. Des valeurs de chaîne de [b]"r"[/b] ou [b]"w"[/b] spécifient que les fichiers d'entrée, ou les fichiers de sortie, respectivement, devraient utiliser les E/S binaires. Des valeurs de chaîne de [b]"rw"[/b] ou [b]"wr"[/b] spécifient que tous les fichiers devraient utiliser les E/S binaires. Toute autre chaîne est traitée comme [b]"rw"[/b], mais génère un message d'avertissement.[/col][/row][/table] [b]CONVFMT[/b] [table][row][col] [/col][col]Le format de conversion pour les nombres, [b]"%.6g"[/b] par défaut.[/col][/row][/table] [b]ENVIRON[/b] [table][row][col] [/col][col]Un tableau contenant les valeurs de l'environnement actuel. Le tableau est indexé par les variables d'environnement, chaque élément étant la valeur de cette variable (p.ex. [b]ENVIRON["HOME"][/b] pourrait être [b]/home/fred ).[/b] Modifier ce tableau n'affecte pas l'environnement vu par les programmes qu'engendre [i]gawk[/i] via une redirection ou via la fonction [b]system() .[/b][/col][/row][/table] [b]ERRNO[/b] [table][row][col] [/col][col]Si une erreur système se produit pendant une redirection pour [b]getline ,[/b] lors d'une lecture pour [b]getline ,[/b] or durant un [b]close() ,[/b] alors [b]ERRNO[/b] contiendra une chaîne de caractères décrivant l'erreur. La valeur est sujette à traduction dans des localisations non anglaises.[/col][/row][/table] [b]FIELDWIDTHS[/b] [table][row][col] [/col][col]Une liste de largeurs de champs séparées chaque fois par des espaces. Quand elle est définie, [i]gawk[/i] découpe l'entrée en champs de largeur fixe, au lieu d'utiliser la valeur de la variable [b]FS[/b] comme séparateur de champs.[/col][/row][/table] [b]FILENAME[/b] [table][row][col] [/col][col]Le nom du fichier d'entrée actuel. Si aucun fichier n'a été spécifié sur la ligne de commandes, la valeur de [b]FILENAME[/b] est "-". Néanmoins, [b]FILENAME[/b] n'est pas défini à l'intérieur du bloc [b]BEGIN[/b] (à moins qu'il ne soit défini par [b]getline ).[/b][/col][/row][/table] [b]FNR[/b] [table][row][col] [/col][col]Le numéro d'enregistrement d'entrée dans le fichier d'entrée courant.[/col][/row][/table] [b]FS[/b] [table][row][col] [/col][col]Le séparateur des champs en entrée, une espace par défaut. Voyez [b]Champs[/b] au-dessus.[/col][/row][/table] [b]IGNORECASE[/b] [table][row][col] [/col][col]Contrôle la sensibilité à la casse de toutes les expressions rationnelles et des opérations sur les chaînes de caractères. Si [b]IGNORECASE[/b] a une valeur non nulle, alors les comparaisons de chaînes de caractères et la reconnaissance de motifs dans les règles, la découpe en champs avec [b]FS ,[/b] la séparation des enregistrements avec [b]RS ,[/b] la détection des expressions rationnelles correspondant à [b]~[/b] et [b]!~ ,[/b] et les fonctions prédéfinies [b]gensub() ,[/b] [b]gsub() ,[/b] [b]index() ,[/b] [b]match() ,[/b] [b]split() ,[/b] et [b]sub()[/b] ignoreront la casse quand elles effectuent des opérations sur des expressions rationnelles. [b]NOTE :[/b] L'indiçage de tableau n'est [i]pas[/i] affecté, ni la fonction [b]asort() .[/b] .5 Ainsi, si [b]IGNORECASE[/b] n'est pas égal à zéro, [b]/aB/[/b] reconnaît chacune des chaînes [b]"ab"[/b], [b]"aB"[/b], [b]"Ab"[/b] et [b]"AB"[/b]. Comme pour toutes les variables *(AK, la valeur initiale de [b]IGNORECASE[/b] est nulle, de sorte que toutes les opérations sur des expressions rationnelles ou des chaînes de caractères sont normalement sensibles à la casse. Sous Unix, l'entièreté du jeu de caractères ISO 8859-1 Latin-1 est utilisée quand on ignore la casse.[/col][/row][/table] [b]LINT[/b] [table][row][col] [/col][col]Fournit un contrôle dynamique de l'option [b]-^-lint[/b] à partir de l'intérieur d'un programme *(AK. Quand il vaut true (vrai), [i]gawk[/i] affiche les avertissements de lint. Quand il vaut false (faux), il ne le fait pas. Quand on lui affecte pour valeur la chaîne [b]"fatal"[/b], les avertissements de lint deviennent des erreurs fatales, exactement comme avec [b]-^-lint=fatal .[/b] Toute autre valeur affiche juste des avertissements.[/col][/row][/table] [b]NF[/b] [table][row][col] [/col][col]Le nombre de champs dans l'enregistrement d'entrée courant.[/col][/row][/table] [b]NR[/b] [table][row][col] [/col][col]Le nombre total d'enregistrements d'entrée vus jusqu'ici.[/col][/row][/table] [b]OFMT[/b] [table][row][col] [/col][col]Le format de sortie pour les nombres, [b]"%.6g"[/b] par défaut.[/col][/row][/table] [b]OFS[/b] [table][row][col] [/col][col]Le séparateur de champs en sortie, une espace par défaut.[/col][/row][/table] [b]ORS[/b] [table][row][col] [/col][col]Le séparateur d'enregistrements en sortie, un saut de ligne par défaut.[/col][/row][/table] [b]PROCINFO[/b] [table][row][col] [/col][col]Les éléments de ce tableau donnent accès à des informations sur le programme *(AK en cours d'exécution. Sur certains systèmes, il peut y avoir des éléments dans le tableau, [b]"groupe1"[/b] jusqu'à [b]"groupe[/b][i]n[/i][b]"[/b] pour un certain [b]n ,[/b] qui est le nombre de groupes supplémentaires dont le processus dispose. Utilisez l'opérateur [b]in[/b] pour tester la présence de ces éléments. Les éléments suivants sont garantis être disponibles :[table][row][col] [/col][col][/col][/row][/table] [table][row][col] [/col][col][b]PROCINFO["egid"][/b] la valeur de l'appel système [b]getegid (2).[/b][/col][/row][/table] [table][row][col] [/col][col][b]PROCINFO["euid"][/b] la valeur de l'appel système [b]geteuid (2).[/b][/col][/row][/table] [table][row][col] [/col][col][b]PROCINFO["FS"][/b] [b]"FS"[/b] si le découpage en champs avec [b]FS[/b] est activé, ou [b]"FIELDWIDTHS"[/b] si le découpage en champs avec [b]FIELDWIDTHS[/b] est activé.[/col][/row][/table] [table][row][col] [/col][col][b]PROCINFO["gid"][/b] la valeur de l'appel système [b]getgid (2).[/b][/col][/row][/table] [table][row][col] [/col][col][b]PROCINFO["pgrpid"][/b] l'ID de groupe de processus du processus courant.[/col][/row][/table] [table][row][col] [/col][col][b]PROCINFO["pid"][/b] l'ID de processus du processus courant.[/col][/row][/table] [table][row][col] [/col][col][b]PROCINFO["ppid"][/b] l'ID du processus parent du processus courant.[/col][/row][/table] [table][row][col] [/col][col][b]PROCINFO["uid"][/b] la valeur de l'appel système [b]getuid (2).[/b][/col][/row][/table][/col][/row][/table] [b]RS[/b] [table][row][col] [/col][col]Le séparateur d'enregistrements en entrée, un saut de ligne par défaut.[/col][/row][/table] [b]RT[/b] [table][row][col] [/col][col]Le terminateur d'enregistrement. [i]gawk[/i] affecte à [b]RT[/b] le texte d'entrée qui correspond au caractère ou à l'expression rationnelle spécifié(e) par [b]RS .[/b][/col][/row][/table] [b]RSTART[/b] [table][row][col] [/col][col]L'indice du premier caractère qui correspond par [b]match() ;[/b] 0 s'il n'y a pas de correspondance. (Cela implique que les indices des caractères commencent à un.)[/col][/row][/table] [b]RLENGTH[/b] [table][row][col] [/col][col]La longueur de la chaîne de caractères qui correspond par [b]match() ;[/b] -1 s'il n'y a pas de correspondance.[/col][/row][/table] [b]SUBSEP[/b] [table][row][col] [/col][col]Le caractère utilisé pour séparer les sous-indices multiples des éléments d'un tableau, par défaut « [b][/b]e034 ».[/col][/row][/table] [b]TEXTDOMAIN[/b] [table][row][col] [/col][col]Le domaine de texte du programme *(AK ; utilisé pour trouver les traductions locale-isées des chaînes de caractères du programme.[/col][/row][/table] [b]Tableaux[/b] Les tableaux sont indicés par une expression entre crochets [b]( [ et ] ).[/b] Si l'expression est une liste d'expressions [i]( expr , expr ...),[/i] alors l'indice du tableau est une chaîne de caractères constituée de la concaténation de la valeur (chaîne de caractères) de chaque expression, séparées entre elles par la valeur de la variable [b]SUBSEP .[/b] Cette facilité est utilisée pour simuler les tableaux multi-dimensionnels. Par exemple : [table][row][col] [/col][col] .ft B i = "A";^ j = "B";^ k = "C" [b][/b] x[i, j, k] = "bonjour, mondeen" .ft R[/col][/row][/table] affecte la chaîne de caractères [b]"bonjour,[/b] mondeen" à l'élément du tableau [b]x[/b] qui est indexé par la chaîne de caractères [b]"A[/b]e034Be034C". Tous les tableaux dans *(AK sont associatifs, c.-à-d. qu'ils sont indexés par des valeurs de type chaîne de caractères. L'opérateur spécial [b]in[/b] peut être utilisé dans une instruction [b]if[/b] ou [b]while[/b] pour déterminer si un tableau comporte un indice constitué d'une valeur particulière. [table][row][col] [/col][col] .ft B .nf if (val in tableau) print tableau[val] .fi .ft[/col][/row][/table] Si le tableau comporte de multiples index, utilisez [b](i, j) in tableau .[/b] La construction [b]in[/b] peut également être utilisée dans une boucle [b]for[/b] pour itérer sur tous les éléments du tableau. Un élément peut être supprimé d'un tableau en utilisant l'instruction [b]delete .[/b] L'instruction [b]delete[/b] peut aussi être utilisée pour supprimer l'entièreté du contenu d'un tableau, en spécifiant uniquement le nom du tableau sans aucun indice. [b]Typage des variables et conversion[/b] Les variables et les champs peuvent être des nombres (flottants), des chaînes de caractères, ou les deux. La façon dont la valeur d'une variable est interprétée dépend du contexte. Si elle est utilisée dans une expression numérique, elle sera traitée en tant que nombre ; si elle est utilisée en tant que chaîne de caractères, elle sera traitée comme une chaîne de caractères. Pour forcer une variable à être traitée comme un nombre, ajoutez-lui zéro ; pour la forcer à être traitée comme une chaîne de caractères, concaténez-la avec la chaîne de caractères vide. Quand une chaîne de caractères doit être convertie en nombre, la conversion est accomplie en utilisant [b]strtod (3).[/b] Un nombre est converti en une chaîne de caractères en utilisant la valeur de [b]CONVFMT[/b] en tant que chaîne de format pour [b]sprintf (3),[/b] avec la valeur numérique de la variable comme argument. Néanmoins, même si tous les nombres dans *(AK sont des flottants, les valeurs intégrales sont [i]toujours[/i] converties en entiers. Par conséquent, étant donné [table][row][col] [/col][col] .ft B .nf CONVFMT = "%2.2f" a = 12 b = a "" .fi .ft R[/col][/row][/table] la variable [b]b[/b] a une valeur de type chaîne de caractères de [b]"12"[/b] et non de [b]"12.00"[/b]. [i]gawk[/i] effectue les comparaisons comme suit : si deux variables sont numériques, elles sont comparées numériquement. Si une valeur est numérique et l'autre a une valeur de type chaîne de caractères qui est une « chaîne de caractères numérique », alors les comparaisons sont également effectuées numériquement. Sinon, la valeur numérique est convertie en une chaîne de caractères et une comparaison de chaînes de caractères est effectuée. Deux chaînes sont comparées, bien sûr, en tant que chaînes de caractères. Notez que le standard *(PX applique partout le concept de « chaîne de caractères numérique », même sur les constantes de type chaîne de caractères. Néanmoins, c'est clairement incorrect, et [i]gawk[/i] ne fait pas cela. (Heureusement, cela est corrigé dans la prochaine version du standard.) Notez que les constantes de type chaîne de caractères, comme [b]"57"[/b], [i]ne[/i] sont [i]pas[/i] des chaînes de caractères numériques, elles sont des constantes de type chaîne de caractères. Le concept de « chaîne de caractères numériques » ne s'applique qu'aux champs, à l'entrée de [b]getline , à FILENAME ,[/b] aux éléments de [b]ARGV , aux éléments de[/b] [b]ENVIRON[/b] et à ceux d'un tableau créé par [b]split()[/b] qui sont des chaînes de caractères numériques. L'idée de base est que [b]l'entrée de l'utilisateur ,[/b] et uniquement elle, qui semble numérique, devrait être traitée de cette façon. Les variables non initialisées ont la valeur numérique 0 et la valeur de type chaîne de caractères "" (la chaîne vide). [b]Constantes octales et hexadécimales[/b] À partir de la version 3.1 de [b]gawk ,[/b] vous pouvez utiliser des constantes octales et hexadécimales de style C dans le code source de vos programmes AWK. Par exemple, la valeur octale [b]011[/b] est égale au [b]9[/b] décimal, et la valeur hexadécimale [b]0x11[/b] est égale au 17 décimal. [b]Constantes de type chaîne de caractères.[/b] Les constantes de type chaîne de caractères dans *(AK sont des séquences de caractères enfermées dans des guillemets ([b]"[/b]). À l'intérieur des chaînes, certaines [i]séquences d'échappement[/i] sont reconnues, comme en C. Ce sont : [b]ee[/b] [table][row][col] [/col][col]Un backslash littéral.[/col][/row][/table] [b]ea[/b] [table][row][col] [/col][col]Le caractère d'« alerte » ; habituellement le caractère s-1ASCIIs+1 s-1BELs+1.[/col][/row][/table] [b]eb[/b] [table][row][col] [/col][col]Effacement arrière.[/col][/row][/table] [b]ef[/b] [table][row][col] [/col][col]saut de page.[/col][/row][/table] [b]en[/b] [table][row][col] [/col][col]nouvelle ligne.[/col][/row][/table] [b]er[/b] [table][row][col] [/col][col]retour chariot.[/col][/row][/table] [b]et[/b] [table][row][col] [/col][col]tabulation horizontale.[/col][/row][/table] [b]ev[/b] [table][row][col] [/col][col]tabulation verticale.[/col][/row][/table] [b][i]ex ^chiffres hexadécimaux[/i][/b] [table][row][col] [/col][col]Le caractère représenté par la chaîne de chiffres hexadécimaux suivant le [b]ex .[/b] Comme en C *(AN, tous les chiffres hexadécimaux suivants sont considérés faire partie de la séquence d'échappement. (Cette fonctionnalité devrait nous apprendre quelque chose sur la conception du langage par le comité.) P.ex., [b]"[/b]ex1B" est le caractère s-1ASCIIs+1 s-1ESCs+1 (échappement).[/col][/row][/table] [b][i]e ddd[/i][/b] [table][row][col] [/col][col]Le caractère représenté par la séquence d'un, deux ou trois chiffres octaux. P.ex., [b]"[/b]e033" est le caractère s-1ASCIIs+1 s-1ESCs+1 (échappement).[/col][/row][/table] [b][i]e c[/i][/b] [table][row][col] [/col][col]Le caractère littéral [b]c^ .[/b][/col][/row][/table] Les séquences d'échappement peuvent également être utilisées à l'intérieur d'expressions rationnelles constantes (p.ex. [b]/[[/b] etefenerev]/ reconnaît les caractères d'espacement). En mode compatibilité, les caractères représentés par des séquences d'échappement octales et hexadécimales sont traités de façon littérale lorsqu'ils sont utilisés dans des constantes expression rationnelle. Par conséquent, [b]/ae52b/[/b] est équivalent à [b]/ae*b/ .[/b] [size=18] [b]Motifs et actions[/b] [/size] *(AK est un langage orienté ligne. Le motif vient en premier lieu, et l'action vient ensuite. Les instructions d'action sont enfermées dans des accolades [b]{[/b] et [b]} .[/b] Le motif peut être absent, ou bien l'action, mais bien entendu pas les deux. Si le motif est manquant, l'action est exécutée une fois pour chaque enregistrement d'entrée. Une action manquante est équivalente à[table][row][col] [/col][col] [b]{ print }[/b][/col][/row][/table] qui affiche l'enregistrement en entier. Les commentaires commencent par le caractère « # » , et continuent jusqu'à la fin de la ligne. Les lignes blanches peuvent être utilisées pour séparer les instructions. Normalement, une instruction se termine par un saut de ligne ; néanmoins, ce n'est pas le cas pour les lignes se terminant par « [b],[/b] », [b]{ ,[/b] [b]? ,[/b] [b]: ,[/b] [b]&& ,[/b] ou [b]|| .[/b] Les lignes se terminant par [b]do[/b] ou [b]else[/b] voient également leurs instructions automatiquement continuées sur la ligne suivante. Dans les autres cas, une ligne peut être continuée en la faisant terminer par un « e », auquel cas le saut de ligne est ignoré. Plusieurs instructions peuvent être placées sur une ligne en les séparant par un « ; ». Ceci s'applique aussi bien aux instructions de la partie action d'une paire motif-action (le cas habituel), qu'aux instructions motif-action elles-mêmes. [b]Motifs[/b] Les motifs *(AK peuvent prendre une des formes suivantes : [table][row][col] [/col][col] .nf [b]BEGIN[/b] [b]END[/b] [b][i]/ expression rationnelle /[/i][/b] [i]expression relationnelle[/i] [b][i]motif && motif[/i][/b] [b][i]motif || motif[/i][/b] [b][i]motif ? motif : motif[/i][/b] [b][i]( motif )[/i][/b] [b][i]! motif[/i][/b] [b][i]motif1 , motif2[/i][/b] .fi[/col][/row][/table] [b]BEGIN[/b] et [b]END[/b] sont deux types de motifs particuliers qui ne sont pas mis en correspondance avec l'entrée. Les parties action de tous les motifs [b]BEGIN[/b] sont fusionnées comme si toutes les instructions avaient été écrites dans un seul bloc [b]BEGIN .[/b] Elles sont exécutées avant la lecture de quoi que ce soit en entrée. De façon similaire, tous les blocs [b]END[/b] sont fusionnés, et exécutés quand l'entrée est épuisée (ou quand une instruction [b]exit[/b] est exécutée). Les motifs [b]BEGIN[/b] et [b]END[/b] ne peuvent être combinés avec d'autres motifs dans les expressions de motif. Les motifs [b]BEGIN[/b] et [b]END[/b] ne peuvent avoir de partie action manquante. Pour les motifs de type [b][i]/ expression rationnelle /[/i][/b] , l'instruction associée est exécutée pour chaque enregistrement d'entrée qui correspond à l'expression rationnelle. Les expressions rationnelles sont les mêmes que celles de [b]egrep (1),[/b] et sont résumées ci-dessous. Une [i]expression relationnelle[/i] peut utiliser n'importe quel opérateur défini plus bas dans la section dédiée aux actions. Ces expressions testent en général si certains champs correspondent à certaines expressions rationnelles. Les opérateurs [b]&& ,[/b] [b]|| ,[/b] et [b]![/b] sont les ET, OU et NON logiques respectivement, comme en C. Ils effectuent une évaluation paresseuse, à nouveau comme en C, et sont utilisées pour combiner des expressions de motif plus primitives. Comme dans la plupart des langages, les parenthèses peuvent être employées pour modifier l'ordre d'évaluation. L'opérateur [b]?:[/b] se comporte comme son homologue en C. Si le premier motif convient, alors le motif utilisé pour le test de correspondance sera le deuxième motif ; sinon, ce sera le troisième. Un seul d'entre les deuxième et troisième motifs est évalué. La forme [b][i]motif1 , motif2[/i][/b] d'une expression est appelée un [b]motif intervalle .[/b] Il correspond à tous les enregistrements d'entrée dont le début correspond à [b]motif1 ,[/b] et continue jusqu'à ce qu'un enregistrement corresponde à [b]motif2[/b] inclusivement. Il ne se combine avec aucun autre type d'expression de motif. [b]Expressions rationnelles[/b] Les expressions rationnelles utilisent la forme étendue trouvée dans [b]egrep .[/b] Elles sont composées de caractères de la façon suivante : [i]c[/i] [table][row][col] [/col][col]correspond au caractère (non méta) [b]c .[/b][/col][/row][/table] [i]ec[/i] [table][row][col] [/col][col]correspond au caractère littéral [b]c .[/b][/col][/row][/table] [b].[/b] [table][row][col] [/col][col]correspond à n'importe quel caractère, [i]y compris[/i] le saut de ligne.[/col][/row][/table] [b]^[/b] [table][row][col] [/col][col]correspond au début d'une chaîne de caractères.[/col][/row][/table] [b]$[/b] [table][row][col] [/col][col]correspond à la fin d'une chaîne de caractères.[/col][/row][/table] [b][i][ abc... ][/i][/b] [table][row][col] [/col][col]liste de caractères : correspond à n'importe lequel des caractères [b]abc... .[/b][/col][/row][/table] [b][i][^ abc... ][/i][/b] [table][row][col] [/col][col]liste de caractères niée, correspond à tous les caractères sauf [b]abc... .[/b][/col][/row][/table] [b][i]r1 | r2[/i][/b] [table][row][col] [/col][col]alternative : correspond à [i]r1[/i] ou [b]r2 .[/b][/col][/row][/table] [i]r1r2[/i] [table][row][col] [/col][col]concaténation : correspond à [b]r1 ,[/b] puis [b]r2 .[/b][/col][/row][/table] [b][i]r +[/i][/b] [table][row][col] [/col][col]correspond à au moins un [b]r .[/b][/col][/row][/table] [b][i]r *[/i][/b] [table][row][col] [/col][col]correspond à un nombre quelconque de [b]r .[/b][/col][/row][/table] [b][i]r ?[/i][/b] [table][row][col] [/col][col]correspond à zéro ou un [b]r .[/b][/col][/row][/table] [b][i]( r )[/i][/b] [table][row][col] [/col][col]groupement : correspond à [b]r .[/b][/col][/row][/table] [/col][/row][/table] [b][i]r { n }[/i][/b] [/col][/row][/table] [b][i]r { n ,}[/i][/b] [/col][/row][/table] [b][i]r { n , m }[/i][/b] [table][row][col] [/col][col]Un ou deux nombres à l'intérieur d'accolades dénote une [b]expression d'intervalle .[/b] S'il y en a un, l'expression rationnelle précédente [i]r[/i] est répétée [i]n[/i] fois. S'il y a deux nombres séparés par une virgule, [i]r[/i] est répété entre [i]n[/i] à [i]m[/i] fois. S'il y a un nombre suivi d'une virgule, alors [i]r[/i] est répété au moins [i]n[/i] fois. .5 Les expressions d'intervalle sont uniquement disponibles si [b]-^-posix[/b] ou [b]-^-re-interval[/b] a été spécifié sur la ligne de commandes. [b]ey[/b] [table][row][col] [/col][col]correspond à la chaîne de caractères vide au début ou à la fin d'un mot.[/col][/row][/table] [b]eB[/b] [table][row][col] [/col][col]correspond à la chaîne vide à l'intérieur d'un mot.[/col][/row][/table] [b]e<[/b] [table][row][col] [/col][col]correspond à la chaîne vide au début d'un mot.[/col][/row][/table] [b]e>[/b] [table][row][col] [/col][col]correspond à la chaîne vide à la fin d'un mot.[/col][/row][/table] [b]ew[/b] [table][row][col] [/col][col]correspond à n'importe caractère (lettre, chiffre ou caractère de soulignement) constitutif du mot.[/col][/row][/table] [b]eW[/b] [table][row][col] [/col][col]correspond à n'importe caractère ne faisant pas partie du mot.[/col][/row][/table] [b]e`[/b] [table][row][col] [/col][col]correspond à la chaîne vide au début d'un tampon (chaîne de caractères).[/col][/row][/table] [b]e'[/b] [table][row][col] [/col][col]correspond à la chaîne de caractères vide à la fin d'un tampon.[/col][/row][/table] Les séquences d'échappement qui sont valides dans les constantes de type chaîne de caractères (voir ci-dessous) sont également légales dans les expressions rationnelles. Les [i]classes de caractères[/i] sont une nouvelle fonctionnalité introduite par le standard *(PX. Une classe de caractères est une notation spéciale pour la description de listes de caractères qui ont un attribut spécifique, mais les caractères réels eux-mêmes peuvent varier de pays à pays et/ou de jeu de caractères à jeu de caractères. Par exemple, la notion de ce qu'est un caractère alphabétique diffère aux USA et en France. Une classe de caractères n'est valide dans une expression rationnelle [i]qu'à l'intérieur[/i] des crochets d'une liste de caractères. Les classes de caractères consistent en [b][: , un [/b] mot-clé dénotant la classe, et [b]:] . Les [/b] classes de caractères définies par le standard *(PX sont : [b][:alnum:][/b] [table][row][col] [/col][col]Caractères alphanumériques.[/col][/row][/table] [b][:alpha:][/b] [table][row][col] [/col][col]Caractères alphabétiques.[/col][/row][/table] [b][:blank:][/b] [table][row][col] [/col][col]Espaces et tabulations.[/col][/row][/table] [b][:cntrl:][/b] [table][row][col] [/col][col]Caractères de contrôle.[/col][/row][/table] [b][:digit:][/b] [table][row][col] [/col][col]Caractères numériques.[/col][/row][/table] [b][:graph:][/b] [table][row][col] [/col][col]Caractères qui sont à la fois imprimables et visibles. (Une espace est imprimable, mais pas visible, alors qu'un [b]a[/b] est les deux à la fois.)[/col][/row][/table] [b][:lower:][/b] [table][row][col] [/col][col]Caractères alphabétiques en minuscule.[/col][/row][/table] [b][:print:][/b] [table][row][col] [/col][col]Caractères imprimables (qui ne sont pas des caractères de contrôle).[/col][/row][/table] [b][:punct:][/b] [table][row][col] [/col][col]Caractères de ponctuation (caractères qui ne sont ni des lettres, ni des chiffres, ni des caractères de contrôle, ni des caractères d'espacement).[/col][/row][/table] [b][:space:][/b] [table][row][col] [/col][col]Caractères d'espacement (comme l'espace, la tabulation et le saut de page pour en nommer quelques uns).[/col][/row][/table] [b][:upper:][/b] [table][row][col] [/col][col]Caractères alphabétiques en majuscule.[/col][/row][/table] [b][:xdigit:][/b] [table][row][col] [/col][col]Caractères qui sont des chiffres hexadécimaux.[/col][/row][/table] Par exemple, avant le standard *(PX, pour détecter les caractères alphanumériques, vous auriez dû écrire [b]/[A-Za-z0-9]/ .[/b] Si votre jeu de caractères contenait d'autres caractères alphanumériques, ceci ne les détecterait pas, et si votre jeu de caractères fusionnait (les accents avec les caractères) différemment de l's-1ASCIIs+1, cela pourrait ne même pas détecter les caractères alphanumériques s-1ASCIIs+1 . Avec les classes de caractères *(PX, vous pouvez écrire [b]/[[:alnum:]]/ ,[/b] et ceci convient pour tous les caractères alphabétiques et alphanumériques de votre jeu de caractères. Deux séquences additionnelles spéciales peuvent apparaître dans les listes de caractères. Elles s'appliquent aux jeux de caractères non ASCII, qui peuvent contenir des symboles uniques (appelés [b]éléments assemblés (collating elements))[/b] qui sont représentés par plus d'un caractère, ainsi que certains caractères qui sont équivalents dans les opérations [i]d' assemblage[/i] ou de tri. (P.ex., en français, un « e » simple, et un e accent-grave sont équivalents.) [table][row][col] [/col][col]Symboles Assemblés Un symbole assemblé est un élément assemblé multi-caractères enfermé dans des [b][.[/b] et [b].] .[/b] Par exemple, si [b]ch[/b] est un élément assemblé, alors [b][[.ch.]][/b] est une expression rationnelle qui correspond à cet élément, alors que [b][ch][/b] est une expression rationnelle qui correspond à [b]c[/b] ou à [b]h .[/b][/col][/row][/table] [table][row][col] [/col][col]Classes d'Équivalence Une classe d'équivalence est un nom spécifique à une localisation représentant une liste de caractères qui sont équivalents. Le nom est enfermé dans des [b][=[/b] et [b]=] .[/b] Par exemple, le nom [b]e[/b] pourrait être utilisé pour représenter « e, » « eh'-w:e:u'`, » ou « eh'-w:e:u'`. ». Dans ce cas, [b][[=e]][/b] est une expression rationnelle qui correspond à n'importe lequel des [b]e ,[/b] [b]eh'-w:e:u'' ,[/b] ou [b]eh'-w:e:u'` .[/b][/col][/row][/table] Ces fonctionnalités sont très précieuses pour les localisations non anglophones. Les fonctions de bibliothèque qu'utilise [i]gawk[/i] pour effectuer la mise en correspondance des expressions rationnelles ne reconnaissent actuellement que les classes de caractères *(PX ; elles ne reconnaissent ni les symboles assemblés, ni les classes d'équivalence. Les opérateurs [b]ey ,[/b] [b]eB ,[/b] [b]e< ,[/b] [b]e> ,[/b] [b]ew ,[/b] [b]eW ,[/b] [b]e` ,[/b] et [b]e'[/b] sont spécifiques à [b]gawk ; [/b] ce sont des extensions basées sur des facilités offertes par les bibliothèques d'expressions rationnelles *(GN. Les diverses options de la ligne de commandes contrôlent la façon dont [i]gawk[/i] interprète les caractères dans les expressions rationnelles. [table][row][col] [/col][col]Pas d'option Dans le cas par défaut, [i]gawk[/i] fournit toutes les facilités des expressions rationnelles *(PX et des opérateurs *(GN sur les expressions rationnelles décrits au-dessus. Néanmoins, les expressions d'intervalle ne sont pas supportées.[/col][/row][/table] [b]-^-posix[/b] [table][row][col] [/col][col]Seules les expressions rationnelles *(PX sont supportées, les opérateurs *(GN perdent toute signification spéciale (p.ex., [b]ew[/b] correspond à un [b]w[/b] littéral). Les expressions d'intervalle sont autorisées.[/col][/row][/table] [b]-^-traditional[/b] [table][row][col] [/col][col]Les expressions rationnelles traditionnelles de [i]l' awk[/i] UNIX sont utilisées. Les opérateurs *(GN perdent toute signification spéciale, les expressions d'intervalle ne sont pas disponibles, ni les classes de caractères *(PX [b]( [[:alnum:]][/b] , etc). Les caractères décrits par des séquences d'échappement octales ou hexadécimales sont traités littéralement, même s'ils représentent des métacaractères d'expressions rationnelles.[/col][/row][/table] [b]-^-re-interval[/b] [table][row][col] [/col][col]Permet l'utilisation d'expressions d'intervalle dans les expressions rationnelles, même si [b]-^-traditional[/b] a été fourni.[/col][/row][/table] [b]Actions[/b] Les instructions d'action sont enfermées entre accolades. Les instructions d'action sont constituées des instructions d'affectation, d'alternative et de bouclage habituelles trouvées dans la plupart des langages. Les opérateurs, instructions de contrôle et instructions d'entrée/sortie disponibles sont calqués sur ceux du C. [b]Opérateurs[/b] En *(AK, les opérateurs sont, par ordre décroissant de priorité : [b]( &... )[/b] [table][row][col] [/col][col]Groupement[/col][/row][/table] [b]$[/b] [table][row][col] [/col][col]Référence de champ.[/col][/row][/table] [b]++ -^-[/b] [table][row][col] [/col][col]Incrémentation et décrémentation, à la fois préfixe et postfixe.[/col][/row][/table] [b]^[/b] [table][row][col] [/col][col]Exponentiation ([b]**[/b] peut également être utilisé, ainsi que [b]**=[/b] pour l'opérateur d'affectation).[/col][/row][/table] [b]+ - ![/b] [table][row][col] [/col][col]Plus unaire, moins unaire et négation logique.[/col][/row][/table] [b]* / %[/b] [table][row][col] [/col][col]Multiplication, division, et modulo.[/col][/row][/table] [b]+ -[/b] [table][row][col] [/col][col]Addition et soustraction.[/col][/row][/table] [i]espace[/i] [table][row][col] [/col][col]Concaténation de chaînes de caractères.[/col][/row][/table] [/col][/row][/table] [b]< >[/b] [/col][/row][/table] [b]<= >=[/b] [/col][/row][/table] [b]!= ==[/b] [table][row][col] [/col][col]Les opérateurs relationnels attitrés. [b]~ !~[/b] [table][row][col] [/col][col]Correspondance (négation) d'expressions rationnelles. [b]NOTE :[/b] N'utilisez pas d'expression rationnelle constante [b]( /foo/ )[/b] du côté gauche d'un [b]~[/b] ou un [b]!~ .[/b] N'en utilisez que du côté droit. L'expression [b][i]/foo/ ~ exp[/i][/b] a la même signification que [b](($0[/b] ~ /foo/) ~ [i]exp[/i][b])[/b]. Ce n'est d'habitude [i]pas[/i] ce à quoi on s'attendait.[/col][/row][/table] [b]in[/b] [table][row][col] [/col][col]Appartenance à un tableau.[/col][/row][/table] [b]&&[/b] [table][row][col] [/col][col]ET logique.[/col][/row][/table] [b]||[/b] [table][row][col] [/col][col]OU logique.[/col][/row][/table] [b]?:[/b] [table][row][col] [/col][col]L'expression conditionnelle C. Elle a la forme [b][i]expr1 ? expr2 : expr3c[/i][/b] &. Si [i]expr1[/i] est vraie, la valeur de l'expression sera [b]expr2 ,[/b] sinon elle sera [b]expr3 .[/b] Seule une expression entre [i]expr2[/i] et [i]expr3[/i] est évaluée.[/col][/row][/table] [/col][/row][/table] [b]= += -=[/b] [/col][/row][/table] [b]*= /= %= ^=[/b] [table][row][col] [/col][col]Affectation. À la fois l'affectation [b][i]( var = valeur )[/i][/b] et l'affectation-opérateur (les autres formes) sont supportées. [b]Instructions de contrôle[/b] Les instructions de contrôle sont les suivantes : [table][row][col] [/col][col] .nf [b]if[/b] ([i]condition[/i][b])[/b] [i]instruction[/i] [ [b]else[/b][i][/i] instruction ] [b]while[/b] ([i]condition[/i][b])[/b] [i]instruction[/i] [b]do[/b] [i]instruction[/i] [b]while[/b] ([i]condition[/i][b])[/b] [b]for[/b] ([i]expr1[/i][b];[/b] [i]expr2[/i][b];[/b] [i]expr3[/i][b])[/b] [i]instruction[/i] [b]for[/b] ([i]var[/i] [b]in[/b][i][/i] tableau[b])[/b] [i]instruction[/i] [b]break[/b] [b]continue[/b] [b]delete[/b] [i]tableau[/i]^[b][[/b]^[i]indice[/i]^[b]][/b] [b]delete[/b] [i]tableau[/i]^ [b]exit[/b] [ [i]expression[/i] ] [b]{[/b] [i]instructions[/i] [b]}[/b] .fi[/col][/row][/table] [b]Instructions de/s[/b] Les instruction d'entrée-sortie sont les suivantes : [table][row][col] [/col][col][b]close([/b][i]fichier[/i] [[b],[/b] [i]comment[/i]][b])[/b] Fermer un fichier, tube ou co-processus. L'argument optionnel [i]comment[/i] ne devrait être utilisé que lors de la fermeture d'un côté d'un tube bidirectionnel menant à un co-processus. Il doit être une chaîne de caractères, soit [b]"to"[/b] (vers), soit [b]"from"[/b] (en provenance de).[/col][/row][/table] [b]getline[/b] [table][row][col] [/col][col]Fixer [b]$0[/b] à partir du prochain enregistrement d'entrée ; fixer [b]NF ,[/b] [b]NR ,[/b] [b]FNR .[/b][/col][/row][/table] [b][i]getline < fichier[/i][/b] [table][row][col] [/col][col]Fixer [b]$0[/b] à partir du prochain enregistrement de [b]fichier ;[/b] fixer [b]NF .[/b][/col][/row][/table] [b][i]getline var[/i][/b] [table][row][col] [/col][col]Fixer [i]var[/i] à partir du prochain enregistrement d'entrée ; fixer [b]NR ,[/b] [b]FNR .[/b][/col][/row][/table] [b][i]getline var < fichier[/i][/b] [table][row][col] [/col][col]Fixer [i]var[/i] à partir du prochain enregistrement de [b]fichier .[/b][/col][/row][/table] [table][row][col] [/col][col][i]commande[/i][b][/b] | getline [[i]var[/i]] Exécuter la [i]commande[/i] en envoyant la sortie via un tube soit vers [b]$0[/b] soit vers [b]var ,[/b] comme au-dessus.[/col][/row][/table] [table][row][col] [/col][col][i]commande[/i][b][/b] |& getline [[i]var[/i]] Exécuter la [i]commande[/i] en tant que co-processus en envoyant la sortie via un tube soit vers [b]$0[/b] soit vers [b]var ,[/b] comme au-dessus. Les co-processus sont une extension [b]gawk .[/b][/col][/row][/table] [b]next[/b] [table][row][col] [/col][col]Arrêter de traiter l'enregistrement d'entrée courant. L'enregistrement d'entrée suivant est lu et le traitement commence avec le premier motif du programme *(AK. Si la fin des données d'entrée est atteinte, le ou les blocs [b]END[/b] , s'il y en a, sont exécutés.[/col][/row][/table] [b]nextfile[/b] [table][row][col] [/col][col]Arrêter de traiter le fichier d'entrée actuel. Le prochain enregistrement d'entrée lu provient du fichier d'entrée suivant. [b]FILENAME[/b] et [b]ARGIND[/b] sont mis à jour, [b]FNR[/b] est réinitialisé à 1, et le traitement recommence avec le premier motif du programme *(AK. Si la fin des données d'entrée est atteinte, le ou les blocs [b]END[/b] , s'il y en a, sont exécutés.[/col][/row][/table] [b]print[/b] [table][row][col] [/col][col]Affiche l'enregistrement courant. L'enregistrement de sortie est terminé par la valeur de la variable [b]ORS .[/b][/col][/row][/table] [b][i]print liste-expr[/i][/b] [table][row][col] [/col][col]Affiche des expressions. Chaque expression est séparée par la valeur de la variable [b]OFS .[/b] L'enregistrement de sortie est terminé par la valeur de la variable [b]ORS .[/b][/col][/row][/table] [b][i]print liste-expr > fichier[/i][/b] [table][row][col] [/col][col]Imprime des expressions dans [b]fichier .[/b] Chaque expression est séparée par la valeur de la variable [b]OFS .[/b] L'enregistrement de sortie est terminé par la valeur de la variable [b]ORS .[/b][/col][/row][/table] [b][i]printf fmt, liste-expr[/i][/b] [table][row][col] [/col][col]Formater et afficher.[/col][/row][/table] [b][i]printf fmt, liste-expr > fichier[/i][/b] [table][row][col] [/col][col]Formater et afficher dans [b]fichier .[/b][/col][/row][/table] [b][i]system( ligne-commandes )[/i][/b] [table][row][col] [/col][col]Exécuter la commande [b]ligne-commandes ,[/b] et renvoyer la valeur de sortie (ceci peut ne pas être disponible sur des systèmes non *(PX).[/col][/row][/table] [table][row][col] [/col][col]&[b]fflush([/b][[i]fichier[/i]^][b])[/b] Vider tous les tampons associés au fichier de sortie ouvert ou au tube [b]fichier .[/b] Si [i]fichier[/i] est manquant, alors la sortie standard est vidée. Si [i]fichier[/i] est la chaîne de caractères vide, alors les tampons de tous les fichiers de sortie ouverts et de tous les tubes sont vidés.[/col][/row][/table] Des redirections d'entrée/sortie additionnelles sont permises pour [b]print[/b] et [b]printf .[/b] [b][i]print ... >> fichier[/i][/b] [table][row][col] [/col][col]concatène la sortie au [b]fichier .[/b][/col][/row][/table] [b][i]print ... | commande[/i][/b] [table][row][col] [/col][col]écrit dans un tube.[/col][/row][/table] [b][i]print ... |& commande[/i][/b] [table][row][col] [/col][col]envoie des données à un co-processus.[/col][/row][/table] La commande [b]getline[/b] renvoie 0 à la fin du fichier et -1 en cas d'erreur. Si une erreur se produit, [b]ERRNO[/b] contient une chaîne décrivant le problème. [b]NOTE :[/b] Si vous utilisez un tube ou un co-processus vers [b]getline ,[/b] ou depuis [b]print[/b] ou [b]printf[/b] à l'intérieur d'une boucle, vous [i]devez[/i] utiliser [b]close()[/b] pour créer de nouvelles instances de la commande. *(AK ne ferme pas automatiquement les tubes et les co-processus quand ils renvoient EOF. [b]Linstruction fiprintffp^[/b] Les versions *(AK de l'instruction [b]printf[/b] et de la fonction [b]sprintf()[/b] (voir ci-dessous) acceptent les formats de spécification de conversion suivants : [b]%c[/b] [table][row][col] [/col][col]Un caractère s-1ASCIIs+1. Si l'argument utilisé par [b]%c[/b] est numérique, il est traité en tant que caractère et est affiché. Sinon, l'argument est supposé être une chaîne de caractères, et seul son premier caractère est affiché.[/col][/row][/table] [b]%d , %i[/b] [table][row][col] [/col][col]Un nombre décimal (la partie entière).[/col][/row][/table] [b]%e , %E[/b] [table][row][col] [/col][col]Un nombre flottant de la forme [b][-]d.dddddde[+^-]dd .[/b] Le format [b]%E[/b] utilise [b]E[/b] au lieu de [b]e .[/b][/col][/row][/table] [b]%f[/b] [table][row][col] [/col][col]Un nombre flottant de la forme [b][-]ddd.dddddd .[/b][/col][/row][/table] [b]%g , %G[/b] [table][row][col] [/col][col]Utiliser la conversion [b]%e[/b] ou [b]%f[/b] (prendre la plus courte), les zéros non significatifs étant supprimés. Le format [b]%G[/b] utilise [b]%E[/b] au lieu de [b]%e .[/b][/col][/row][/table] [b]%o[/b] [table][row][col] [/col][col]Un nombre octal non signé (également un entier).[/col][/row][/table] [/col][/row][/table] [b]%u[/b] [table][row][col] [/col][col]Un nombre décimal non signé (également un entier). [b]%s[/b] [table][row][col] [/col][col]Une chaîne de caractères.[/col][/row][/table] [b]%x , %X[/b] [table][row][col] [/col][col]Un nombre hexadécimal non signé (un entier). Le format [b]%X[/b] utilise [b]ABCDEF[/b] au lieu de [b]abcdef .[/b][/col][/row][/table] [b]%%[/b] [table][row][col] [/col][col]Un unique caractère [b]% ;[/b] aucun argument n'est converti.[/col][/row][/table] Des paramètres supplémentaires optionnels peuvent être placés entre [b]%[/b] et la lettre de contrôle : [b][i]numéro $[/i][/b] [table][row][col] [/col][col]Utiliser le [b]numéro -ième[/b] argument à ce moment du formatage. Il est appelé un [i]spécificateur positionnel[/i] et est principalement prévu pour être utilisé dans des versions traduites de chaînes de format, et pas dans le texte original d'un programme AWK. C'est une extension [b]gawk .[/b][/col][/row][/table] [b]-[/b] [table][row][col] [/col][col]L'expression devrait être justifiée à gauche à l'intérieur de son champ.[/col][/row][/table] [i]espace[/i] [table][row][col] [/col][col]Pour les conversions numériques, préfixe les valeurs positives par une espace, et les valeurs négatives par un signe moins.[/col][/row][/table] [b]+[/b] [table][row][col] &n
Fichier
Forum
-
Derniers messages
Bavardages
Aujourd'hui, je rénove ou je construis ^^
Software
problème sur windows 10
Réseaux et Télécom
Administrateur Réseau - Cisco
Réseaux et Télécom
Problème wifi (POE)
Software
Postfix - Need help
Bavardages
Oh râge oh désespoir !
Programmation
Enregistrement client et envoi mail
Software
SÉCURITÉ MACBOOK
Hardware
conseil matos réseau?
Hardware
nVidia Shield Android TV
Actualités
-
Archives
Matériel
Nvidia prévient d'une pénurie de GPU ce trimestre, avec une reprise début 2025
Les Technos
Les Technos #469 : Un jour sans fin
Jeux Vidéos
Test Farming Simulator 25 (PS5) - Des innovations intéressantes mais des performances à revoir
Matériel
Qualcomm souhaite réduire davantage les prix des PC Windows basés sur ARM
Tablettes
Finalement, Google préparerait une nouvelle tablette mais la Pixel Tablet 2 serait abandonnée
Ada
CSS
Cobol
CPP
HTML
Fortran
Java
JavaScript
Pascal
Perl
PHP
Python
SQL
VB
XML
Anon URL
DailyMotion
eBay
Flickr
FLV
Google Video
Google Maps
Metacafe
MP3
SeeqPod
Veoh
Yahoo Video
YouTube
6px
8px
10px
12px
14px
16px
18px
Informaticien.be
- © 2002-2024
Akretio
SPRL - Generated via
Kelare
The Akretio Network:
Akretio
-
Freedelity
-
KelCommerce
-
Votre publicité sur informaticien.be ?