zion - gawk
Nom
gawk - Langage d'examen et de traitement de motifs.
Résumé
gawk [ options de style *(PX ou GNU ] -f fichier-programme [ -^- ] fichier .^.^. gawk [ options de style *(PX ou *(GN ] [ -^- ] texte-programme fichier .^.^. pgawk [ options de style *(PX ou *(GN ] -f fichier-programme [ -^- ] fichier ... pgawk [ options de style *(PX ou *(GN ] [ -^- ] texte-programme fichier ...
Description
gawk 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 The AWK Programming Language , de Aho, Kernighan, et Weinberger, avec les fonctionnalités supplémentaires trouvées dans la version System V Release 4 du awk *(UX. gawk fournit également les extensions awk plus récentes des Laboratoires Bell, et quelques extensions spécifiques *(GN.
pgawk est la version de profilage de gawk . Elle est identique en tout point à gawk , à 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 awkprof.out quand elle a fini. Voyez l'option -^-profile plus bas.
La ligne de commandes est constituée des options de gawk lui-même, du texte du programme *(AK (s'il n'est pas fourni par une option -f ou -^-file ), et des valeurs à rendre disponibles dans les variables *(AK prédéfinies ARGC et ARGV .
Options
Les options de gawk 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 à gawk sont fournies via des arguments à l'option -W. De multiples options -W peuvent être fournies. Chaque option -W a une option longue correspondante, comme détaillé ci-dessous. Les arguments des options longues sont soit liés à l'option via un = , 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.
Options
gawk accepte les options suivantes, listées alphabétiquement :
[/col][/row][/table]
-F sc
[/col][/row][/table]
-^-field-separator sc
Utiliser sc en tant que séparateur de champs (la valeur de la variable prédéfinie FS ). |
-v var^=^val |
-^-assign var^=^val Affecter la valeur val à la variable var , avant que l'exécution du programme ne débute. De telles valeurs de variables sont accessibles au bloc BEGIN d'un programme *(AK. |
-f fichier-programme
[/col][/row][/table]
-^-file fichier-programme
Lire le source du programme *(AK à partir du fichier fichier-programme , au lieu du premier argument de la ligne de commandes. De multiples options -f (ou -^-file ) peuvent être utilisées. |
-mf NNN
[/col][/row][/table]
-mr NNN
Spécifier des limites de mémoire variées à la valeur NNN . Le drapeau f fixe le nombre maximal de champs, et le drapeau r fixe la taille d'enregistrement maximale. Ces deux drapeaux et l'option -m proviennent de la version de recherche des Laboratoires Bell du awk *(UX. Elles sont ignorées par gawk , car gawk n'a pas de limites prédéfinies. |
-W compat
[/col][/row][/table]
-W traditional
[/col][/row][/table]
-^-compat
[/col][/row][/table]
-^-traditional
Exécuter en mode de compatibilité . En mode de compatibilité, gawk se comporte identiquement au awk *(UX ; aucune des extensions spécifiques *(GN n'est reconnue. L'utilisation de -^-traditional est préférée aux autres formes de cette option. Voyez EXTENSIONS GNU ci-dessous pour de plus amples informations. |
-W copyleft
[/col][/row][/table]
-W copyright
[/col][/row][/table]
-^-copyleft
[/col][/row][/table]
-^-copyright
Afficher la version courte du message d'information sur le copyright *(GN sur la sortie standard, et se terminer avec succès. |
-W dump-variables[=fichier] |
-^-dump-variables[=fichier] Imprimer une liste triée des variables globales, de leur type et valeur finale dans fichier . Si aucun fichier n'est fourni, gawk utilise un fichier nommé awkvars.out 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 i , j , etc.) |
-W help
[/col][/row][/table]
-W usage
[/col][/row][/table]
-^-help
[/col][/row][/table]
-^-usage
Afficher un résumé relativement court des options disponibles sur la sortie standard. (Selon les Standards de Codage GNU , ces options provoquent un arrêt immédiat, avec succès.) |
-W lint [ =fatal ]
[/col][/row][/table]
-^-lint [ =fatal ]
Émettre des avertissements sur des constructions qui sont douteuses ou non portables sur d'autres implémentations *(AK. Avec l'argument optionnel fatal , les avertissements de lint deviennent fatals. Cela peut sembler drastique, mais son utilisation encouragera certainement le développement de programmes *(AK plus propres. |
-W lint-old
[/col][/row][/table]
-^-lint-old
Émettre des avertissements sur des constructions qui ne sont pas portables sur la version originale de l' awk Unix. |
-W gen-po
[/col][/row][/table]
-^-gen-po
Analyser lexicalement et syntaxiquement le programme *(AK, et générer un fichier au format *(GN &.po 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 gettext pour plus d'informations sur les fichiers .po . |
-W non-decimal-data
[/col][/row][/table]
-^-non-decimal-data
Reconnaître les valeurs octales et hexadécimales dans les données d'entrée. Utilisez cette option avec une extrême prudence ! .ig |
-W nostalgia
[/col][/row][/table]
-^-nostalgia
Fournir un moment de nostalgie aux utilisateurs d' awk de longue date. .. |
-W posix
[/col][/row][/table]
-^-posix
Ceci active le mode de compatibilité avec les restrictions additionnelles suivantes :
|
-W profile[=fichier_prof] |
-^-profile[=fichier_prof] Envoyer des données de profilage dans fichier_prof . Le défaut est awkprof.out . Lorsqu'il est exécuté avec gawk , le profil est simplement une version « joliment affichée » du programme. Lorsqu'il est exécuté avec pgawk , 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. |
-W re-interval
[/col][/row][/table]
-^-re-interval
Permettre l'utilisation d' expressions d'intervalles dans la reconnaissance des expressions rationnelles (voyez Expressions Rationnelles 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 awk et egrep cohérents l'un avec l'autre. Néanmoins, leur usage va probablement empêcher les anciens programmes *(AK de fonctionner correctement, et gawk ne les fournit donc que si elles sont requises avec cette option ou si -^-posix est spécifié. |
-W source texte-programme
[/col][/row][/table]
-^-source texte-programme
Utiliser texte-programme comme code source du programme *(AK. Cette option permet le mélange de fonctions de bibliothèques (utilisées via les options -f et -^-file ) 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. |
-W version
[/col][/row][/table]
-^-version
Afficher des informations sur la version de gawk utilisée par cette copie sur la sortie standard. C'est utile principalement pour savoir si la copie actuelle de gawk 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 Standards de Codage GNU , ces options provoquent un arrêt immédiat, avec succès.) -^-
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 ARGV pour être traitées. Ceci est particulièrement utile pour exécuter des programmes via le mécanisme « #! » d'interpréteur exécutable. ExÉcution dun programme awk Un programme *(AK est constitué d'une séquence d'instructions motif-action et de définitions optionnelles de fonctions.
gawk lit d'abord le source du programme à partir du (des) fichier(s)-programme(s) éventuel(s), des arguments de -^-source , ou du premier argument non option sur la ligne de commandes. Les options -f et -^-source peuvent être utilisées plusieurs fois sur la ligne de commandes. gawk lit le texte du programme comme si tous les fichiers-programmes 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 AWKPATH spécifie un chemin de recherche à utiliser pour trouver les fichiers sources nommés avec l'option -f . Si cette variable n'existe pas, le chemin par défaut est « .:/usr/local/share/awk ». (Le répertoire réel peut varier, en fonction de la façon dont gawk a été construit et installé.) Si un nom de fichier donné à l'option -f contient un caractère « / » , aucune recherche de chemin n'est effectuée. gawk exécute les programmes *(AK dans l'ordre suivant. D'abord, toutes les affectations de variables spécifiées par l'option -v sont effectuées. Ensuite, gawk compile le programme dans une forme interne. Après cela, gawk exécute le code du (des) bloc(s) BEGIN (s'il y en a), et poursuit en lisant chaque fichier nommé dans le tableau ARGV . S'il n'y a aucun fichier nommé sur la ligne de commandes, gawk lit l'entrée standard. Si un nom de fichier sur la ligne de commandes a la forme var = val , il est traité comme une affectation de variable. La variable var se verra affecter la valeur val . (Cela se produit après l'exécution de l'entièreté des blocs BEGIN .) 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 ARGV est vide (""), gawk l'ignore. Pour chaque enregistrement en entrée, gawk vérifie s'il correspond à un des motifs du programme *(AK. Pour chaque motif convenant à l'enregistrement, l' action 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, gawk exécute le code du (des) bloc(s) END (s'il y en a). Variables, enregistrements et champs 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. Enregistrements 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 RS . Si RS est un caractère unique quelconque, celui-ci séparera les enregistrements. Sinon, RS 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 à RS la chaîne vide, alors les enregistrements sont séparés par des lignes blanches. Quand la valeur de RS 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 FS . Champs Quand un enregistrement d'entrée est lu, gawk le découpe en champs , en utilisant la valeur de la variable FS comme séparateur de champs. Si FS est un caractère unique, les champs sont séparés par celui-ci. Si FS est la chaîne vide, alors chaque caractère individuel devient un champ séparé. Sinon, FS est supposé être une expression rationnelle complète. Dans le cas spécial où FS 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 --posix , plus bas). Notez que la valeur de IGNORECASE (voir ci-dessous) affectera également la façon dont les champs sont découpés quand FS est une expression rationnelle, et la façon dont les enregistrements seront séparés quand RS est une expression rationnelle. Si on affecte à la variable FIELDWIDTHS une liste de nombres séparés par des espaces, chaque champ est supposé avoir une longueur fixe, et gawk découpera l'enregistrement en utilisant les longueurs spécifiées. La valeur de FS est ignorée. Affecter une nouvelle valeur à FS passe outre l'utilisation de FIELDWIDTHS , et restaure le comportement par défaut. Chaque champ de l'enregistrement d'entrée peut être référencé par sa position : $1 , $2 , etc. $0 est l'enregistrement complet. Les champs ne doivent pas forcément être référencés par des constantes :
imprime le cinquième champ de l'enregistrement d'entrée. La variable NF 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 $NF ) produiront la chaîne vide. Néanmoins, affecter vers un champ non existant (p. ex. $(NF+2) = 5 ) augmente la valeur de NF , crée tous les champs interposés avec la chaîne vide comme valeur, et force à recalculer la valeur de $0 , les champs étant séparés par la valeur de OFS . Les références à des champs de numéro négatif provoquent une erreur fatale. Décrémenter NF force l'abandon des valeurs des champs suivant la nouvelle valeur, et le recalcul de la valeur de $0 , les champs étant séparés par la valeur de OFS . Affecter une valeur à un champ existant provoque la reconstruction de l'enregistrement complet quand $0 est référencé. De façon similaire, affecter une valeur à $0 provoque le redécoupage de l'enregistrement, en créant de nouvelles valeurs pour les champs. Variables prédéfinies Les variables prédéfinies de gawk sont : ARGC
ARGIND
ARGV
BINMODE
CONVFMT
ENVIRON
ERRNO
FIELDWIDTHS
FILENAME
FNR
FS
IGNORECASE
LINT
NF
NR
OFMT
OFS
ORS
PROCINFO
RS
RT
RSTART
RLENGTH
SUBSEP
TEXTDOMAIN
Tableaux Les tableaux sont indicés par une expression entre crochets ( [ et ] ). Si l'expression est une liste d'expressions ( expr , expr ...), 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 SUBSEP . Cette facilité est utilisée pour simuler les tableaux multi-dimensionnels. Par exemple :
affecte la chaîne de caractères "bonjour, mondeen" à l'élément du tableau x qui est indexé par la chaîne de caractères "Ae034Be034C". 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 in peut être utilisé dans une instruction if ou while pour déterminer si un tableau comporte un indice constitué d'une valeur particulière.
Si le tableau comporte de multiples index, utilisez (i, j) in tableau . La construction in peut également être utilisée dans une boucle for pour itérer sur tous les éléments du tableau. Un élément peut être supprimé d'un tableau en utilisant l'instruction delete . L'instruction delete 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. Typage des variables et conversion 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 strtod (3). Un nombre est converti en une chaîne de caractères en utilisant la valeur de CONVFMT en tant que chaîne de format pour sprintf (3), 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 toujours converties en entiers. Par conséquent, étant donné
la variable b a une valeur de type chaîne de caractères de "12" et non de "12.00". gawk 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 gawk 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 "57", ne sont pas 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 getline , à FILENAME , aux éléments de ARGV , aux éléments de ENVIRON et à ceux d'un tableau créé par split() qui sont des chaînes de caractères numériques. L'idée de base est que l'entrée de l'utilisateur , 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). Constantes octales et hexadécimales À partir de la version 3.1 de gawk , 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 011 est égale au 9 décimal, et la valeur hexadécimale 0x11 est égale au 17 décimal. Constantes de type chaîne de caractères. Les constantes de type chaîne de caractères dans *(AK sont des séquences de caractères enfermées dans des guillemets ("). À l'intérieur des chaînes, certaines séquences d'échappement sont reconnues, comme en C. Ce sont : ee
ea
eb
ef
en
er
et
ev
ex ^chiffres hexadécimaux
e ddd
e c
Les séquences d'échappement peuvent également être utilisées à l'intérieur d'expressions rationnelles constantes (p.ex. /[ 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, /ae52b/ est équivalent à /ae*b/ . Motifs et actions *(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 { et } . 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 à
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 « , », { , ? , : , && , ou || . Les lignes se terminant par do ou else 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. Motifs Les motifs *(AK peuvent prendre une des formes suivantes :
BEGIN et END sont deux types de motifs particuliers qui ne sont pas mis en correspondance avec l'entrée. Les parties action de tous les motifs BEGIN sont fusionnées comme si toutes les instructions avaient été écrites dans un seul bloc BEGIN . Elles sont exécutées avant la lecture de quoi que ce soit en entrée. De façon similaire, tous les blocs END sont fusionnés, et exécutés quand l'entrée est épuisée (ou quand une instruction exit est exécutée). Les motifs BEGIN et END ne peuvent être combinés avec d'autres motifs dans les expressions de motif. Les motifs BEGIN et END ne peuvent avoir de partie action manquante. Pour les motifs de type / expression rationnelle / , 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 egrep (1), et sont résumées ci-dessous. Une expression relationnelle 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 && , || , et ! 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 ?: 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 motif1 , motif2 d'une expression est appelée un motif intervalle . Il correspond à tous les enregistrements d'entrée dont le début correspond à motif1 , et continue jusqu'à ce qu'un enregistrement corresponde à motif2 inclusivement. Il ne se combine avec aucun autre type d'expression de motif. Expressions rationnelles Les expressions rationnelles utilisent la forme étendue trouvée dans egrep . Elles sont composées de caractères de la façon suivante : c
ec
.
^
$
[ abc... ]
[^ abc... ]
r1 | r2
r1r2
r +
r *
r ?
( r )
|
r { n }
[/col][/row][/table]
r { n ,}
[/col][/row][/table]
r { n , m }
Un ou deux nombres à l'intérieur d'accolades dénote une expression d'intervalle . S'il y en a un, l'expression rationnelle précédente r est répétée n fois. S'il y a deux nombres séparés par une virgule, r est répété entre n à m fois. S'il y a un nombre suivi d'une virgule, alors r est répété au moins n fois. .5 Les expressions d'intervalle sont uniquement disponibles si -^-posix ou -^-re-interval a été spécifié sur la ligne de commandes. ey
eB
e<
e>
ew
eW
e`
e'
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 classes de caractères 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 qu'à l'intérieur des crochets d'une liste de caractères. Les classes de caractères consistent en [: , un mot-clé dénotant la classe, et :] . Les classes de caractères définies par le standard *(PX sont : [/alnum:]
[/alpha:]
[/blank:]
[/cntrl:]
[/digit:]
[/graph:]
[/lower:]
[/print:]
[/punct:]
[/space:]
[/upper:]
[/xdigit:]
Par exemple, avant le standard *(PX, pour détecter les caractères alphanumériques, vous auriez dû écrire /[A-Za-z0-9]/ . 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 /[[:alnum:]]/ , 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 éléments assemblés (collating elements)) qui sont représentés par plus d'un caractère, ainsi que certains caractères qui sont équivalents dans les opérations d' assemblage ou de tri. (P.ex., en français, un « e » simple, et un e accent-grave sont équivalents.)
Ces fonctionnalités sont très précieuses pour les localisations non anglophones. Les fonctions de bibliothèque qu'utilise gawk 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 ey , eB , e< , e> , ew , eW , e` , et e' sont spécifiques à gawk ; 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 gawk interprète les caractères dans les expressions rationnelles.
-^-posix
-^-traditional
-^-re-interval
Actions 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. Opérateurs En *(AK, les opérateurs sont, par ordre décroissant de priorité : ( &... )
$
++ -^-
^
+ - !
* / %
+ -
espace
|
< >
[/col][/row][/table]
<= >=
[/col][/row][/table]
!= ==
Les opérateurs relationnels attitrés. ~ !~
in
&&
||
?:
|
= += -=
[/col][/row][/table]
*= /= %= ^=
Affectation. À la fois l'affectation ( var = valeur ) et l'affectation-opérateur (les autres formes) sont supportées. Instructions de contrôle Les instructions de contrôle sont les suivantes :
Instructions de/s Les instruction d'entrée-sortie sont les suivantes :
getline
getline < fichier
getline var
getline var < fichier
next
nextfile
print liste-expr
print liste-expr > fichier
printf fmt, liste-expr
printf fmt, liste-expr > fichier
system( ligne-commandes )
Des redirections d'entrée/sortie additionnelles sont permises pour print et printf . print ... >> fichier
print ... | commande
print ... |& commande
La commande getline renvoie 0 à la fin du fichier et -1 en cas d'erreur. Si une erreur se produit, ERRNO contient une chaîne décrivant le problème. NOTE : Si vous utilisez un tube ou un co-processus vers getline , ou depuis print ou printf à l'intérieur d'une boucle, vous devez utiliser close() pour créer de nouvelles instances de la commande. *(AK ne ferme pas automatiquement les tubes et les co-processus quand ils renvoient EOF. Linstruction fiprintffp^ Les versions *(AK de l'instruction printf et de la fonction sprintf() (voir ci-dessous) acceptent les formats de spécification de conversion suivants : %c
%d , %i
%e , %E
%f
%g , %G
%o
|
%u
[table][row]
%s
Une chaîne de caractères. |
%x , %X
Un nombre hexadécimal non signé (un entier). Le format %X utilise ABCDEF au lieu de abcdef . |
%
Un unique caractère % ; aucun argument n'est converti. |
Des paramètres supplémentaires optionnels peuvent être placés entre % et la lettre de contrôle :
numéro $
Utiliser le numéro -ième argument à ce moment du formatage. Il est appelé un spécificateur positionnel 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 gawk . |
-
L'expression devrait être justifiée à gauche à l'intérieur de son champ. |
espace
Pour les conversions numériques, préfixe les valeurs positives par une espace, et les valeurs négatives par un signe moins. |
+
[table][row][col] &n
Poster un commentaire