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 :
    
    (bu les séquences d'échappement ex ne sont pas reconnues.

    (bu Seules les espaces et les tabulations peuvent servir de séparateurs de champs quand FS est fixé à une espace unique ; les retours à la ligne (en) ne le peuvent pas.

    (bu Vous ne pouvez continuer les lignes après ? ou : .

    (bu Le synonyme func du mot-clé function n'est pas reconnu.

    (bu Les opérateurs ** et **= ne peuvent être utilisés en remplacement de ^ et ^= .

    (bu La fonction fflush() n'est pas disponible.


    -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.)
-^-
    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.


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.
    motif { instructions d'action } function nom(liste de paramètres) { instructions }


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 :
    .ft B n = 5 print $n .ft R


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
    Le nombre d'arguments sur la ligne de commandes (n'inclut pas les options de gawk , ni le source du programme).

ARGIND
    La position dans ARGV du fichier en cours de traitement.

ARGV
    Tableau des arguments de la ligne de commandes. Le tableau est indexé de 0 à ARGC - 1. Changer dynamiquement le contenu de ARGV peut contrôler les fichiers utilisés pour les données.

BINMODE
    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 "r" ou "w" 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 "rw" ou "wr" spécifient que tous les fichiers devraient utiliser les E/S binaires. Toute autre chaîne est traitée comme "rw", mais génère un message d'avertissement.

CONVFMT
    Le format de conversion pour les nombres, "%.6g" par défaut.

ENVIRON
    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. ENVIRON["HOME"] pourrait être /home/fred ). Modifier ce tableau n'affecte pas l'environnement vu par les programmes qu'engendre gawk via une redirection ou via la fonction system() .

ERRNO
    Si une erreur système se produit pendant une redirection pour getline , lors d'une lecture pour getline , or durant un close() , alors ERRNO contiendra une chaîne de caractères décrivant l'erreur. La valeur est sujette à traduction dans des localisations non anglaises.

FIELDWIDTHS
    Une liste de largeurs de champs séparées chaque fois par des espaces. Quand elle est définie, gawk découpe l'entrée en champs de largeur fixe, au lieu d'utiliser la valeur de la variable FS comme séparateur de champs.

FILENAME
    Le nom du fichier d'entrée actuel. Si aucun fichier n'a été spécifié sur la ligne de commandes, la valeur de FILENAME est "-". Néanmoins, FILENAME n'est pas défini à l'intérieur du bloc BEGIN (à moins qu'il ne soit défini par getline ).

FNR
    Le numéro d'enregistrement d'entrée dans le fichier d'entrée courant.

FS
    Le séparateur des champs en entrée, une espace par défaut. Voyez Champs au-dessus.

IGNORECASE
    Contrôle la sensibilité à la casse de toutes les expressions rationnelles et des opérations sur les chaînes de caractères. Si IGNORECASE 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 FS , la séparation des enregistrements avec RS , la détection des expressions rationnelles correspondant à ~ et !~ , et les fonctions prédéfinies gensub() , gsub() , index() , match() , split() , et sub() ignoreront la casse quand elles effectuent des opérations sur des expressions rationnelles. NOTE : L'indiçage de tableau n'est pas affecté, ni la fonction asort() . .5 Ainsi, si IGNORECASE n'est pas égal à zéro, /aB/ reconnaît chacune des chaînes "ab", "aB", "Ab" et "AB". Comme pour toutes les variables *(AK, la valeur initiale de IGNORECASE 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.

LINT
    Fournit un contrôle dynamique de l'option -^-lint à partir de l'intérieur d'un programme *(AK. Quand il vaut true (vrai), gawk affiche les avertissements de lint. Quand il vaut false (faux), il ne le fait pas. Quand on lui affecte pour valeur la chaîne "fatal", les avertissements de lint deviennent des erreurs fatales, exactement comme avec -^-lint=fatal . Toute autre valeur affiche juste des avertissements.

NF
    Le nombre de champs dans l'enregistrement d'entrée courant.

NR
    Le nombre total d'enregistrements d'entrée vus jusqu'ici.

OFMT
    Le format de sortie pour les nombres, "%.6g" par défaut.

OFS
    Le séparateur de champs en sortie, une espace par défaut.

ORS
    Le séparateur d'enregistrements en sortie, un saut de ligne par défaut.

PROCINFO
    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, "groupe1" jusqu'à "groupen" pour un certain n , qui est le nombre de groupes supplémentaires dont le processus dispose. Utilisez l'opérateur in pour tester la présence de ces éléments. Les éléments suivants sont garantis être disponibles :
    

    PROCINFO["egid"] la valeur de l'appel système getegid (2).

    PROCINFO["euid"] la valeur de l'appel système geteuid (2).

    PROCINFO["FS"] "FS" si le découpage en champs avec FS est activé, ou "FIELDWIDTHS" si le découpage en champs avec FIELDWIDTHS est activé.

    PROCINFO["gid"] la valeur de l'appel système getgid (2).

    PROCINFO["pgrpid"] l'ID de groupe de processus du processus courant.

    PROCINFO["pid"] l'ID de processus du processus courant.

    PROCINFO["ppid"] l'ID du processus parent du processus courant.

    PROCINFO["uid"] la valeur de l'appel système getuid (2).

RS
    Le séparateur d'enregistrements en entrée, un saut de ligne par défaut.

RT
    Le terminateur d'enregistrement. gawk affecte à RT le texte d'entrée qui correspond au caractère ou à l'expression rationnelle spécifié(e) par RS .

RSTART
    L'indice du premier caractère qui correspond par match() ; 0 s'il n'y a pas de correspondance. (Cela implique que les indices des caractères commencent à un.)

RLENGTH
    La longueur de la chaîne de caractères qui correspond par match() ; -1 s'il n'y a pas de correspondance.

SUBSEP
    Le caractère utilisé pour séparer les sous-indices multiples des éléments d'un tableau, par défaut « e034 ».

TEXTDOMAIN
    Le domaine de texte du programme *(AK ; utilisé pour trouver les traductions locale-isées des chaînes de caractères du programme.


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 :

     .ft B i = "A";^ j = "B";^ k = "C" x[i, j, k] = "bonjour, mondeen" .ft R


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.

     .ft B .nf if (val in tableau) print tableau[val] .fi .ft


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é

     .ft B .nf CONVFMT = "%2.2f" a = 12 b = a "" .fi .ft R


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
    Un backslash littéral.

ea
    Le caractère d'« alerte » ; habituellement le caractère s-1ASCIIs+1 s-1BELs+1.

eb
    Effacement arrière.

ef
    saut de page.

en
    nouvelle ligne.

er
    retour chariot.

et
    tabulation horizontale.

ev
    tabulation verticale.

ex ^chiffres hexadécimaux
    Le caractère représenté par la chaîne de chiffres hexadécimaux suivant le ex . 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., "ex1B" est le caractère s-1ASCIIs+1 s-1ESCs+1 (échappement).

e ddd
    Le caractère représenté par la séquence d'un, deux ou trois chiffres octaux. P.ex., "e033" est le caractère s-1ASCIIs+1 s-1ESCs+1 (échappement).

e c
    Le caractère littéral 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 à
    { print }


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 :

     .nf BEGIN END / expression rationnelle / expression relationnelle motif && motif motif || motif motif ? motif : motif ( motif ) ! motif motif1 , motif2 .fi


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
    correspond au caractère (non méta) c .

ec
    correspond au caractère littéral c .

.
    correspond à n'importe quel caractère, y compris le saut de ligne.

^
    correspond au début d'une chaîne de caractères.

$
    correspond à la fin d'une chaîne de caractères.

[ abc... ]
    liste de caractères : correspond à n'importe lequel des caractères abc... .

[^ abc... ]
    liste de caractères niée, correspond à tous les caractères sauf abc... .

r1 | r2
    alternative : correspond à r1 ou r2 .

r1r2
    concaténation : correspond à r1 , puis r2 .

r +
    correspond à au moins un r .

r *
    correspond à un nombre quelconque de r .

r ?
    correspond à zéro ou un r .

( r )
    groupement : correspond à 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
    correspond à la chaîne de caractères vide au début ou à la fin d'un mot.

eB
    correspond à la chaîne vide à l'intérieur d'un mot.

e<
    correspond à la chaîne vide au début d'un mot.

e>
    correspond à la chaîne vide à la fin d'un mot.

ew
    correspond à n'importe caractère (lettre, chiffre ou caractère de soulignement) constitutif du mot.

eW
    correspond à n'importe caractère ne faisant pas partie du mot.

e`
    correspond à la chaîne vide au début d'un tampon (chaîne de caractères).

e'
    correspond à la chaîne de caractères vide à la fin d'un tampon.


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:]
    Caractères alphanumériques.

[/alpha:]
    Caractères alphabétiques.

[/blank:]
    Espaces et tabulations.

[/cntrl:]
    Caractères de contrôle.

[/digit:]
    Caractères numériques.

[/graph:]
    Caractères qui sont à la fois imprimables et visibles. (Une espace est imprimable, mais pas visible, alors qu'un a est les deux à la fois.)

[/lower:]
    Caractères alphabétiques en minuscule.

[/print:]
    Caractères imprimables (qui ne sont pas des caractères de contrôle).

[/punct:]
    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).

[/space:]
    Caractères d'espacement (comme l'espace, la tabulation et le saut de page pour en nommer quelques uns).

[/upper:]
    Caractères alphabétiques en majuscule.

[/xdigit:]
    Caractères qui sont des chiffres hexadécimaux.


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.)
    Symboles Assemblés Un symbole assemblé est un élément assemblé multi-caractères enfermé dans des [. et .] . Par exemple, si ch est un élément assemblé, alors [[.ch.]] est une expression rationnelle qui correspond à cet élément, alors que [ch] est une expression rationnelle qui correspond à c ou à h .

    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 [= et =] . Par exemple, le nom e pourrait être utilisé pour représenter « e, » « eh'-w:e:u'`, » ou « eh'-w:e:u'`. ». Dans ce cas, [[=e]] est une expression rationnelle qui correspond à n'importe lequel des e , eh'-w:e:u'' , ou eh'-w:e:u'` .


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.
    Pas d'option Dans le cas par défaut, gawk 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.

-^-posix
    Seules les expressions rationnelles *(PX sont supportées, les opérateurs *(GN perdent toute signification spéciale (p.ex., ew correspond à un w littéral). Les expressions d'intervalle sont autorisées.

-^-traditional
    Les expressions rationnelles traditionnelles de l' awk 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 ( [[:alnum:]] , 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.

-^-re-interval
    Permet l'utilisation d'expressions d'intervalle dans les expressions rationnelles, même si -^-traditional a été fourni.


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

( &... )
    Groupement

$
    Référence de champ.

++ -^-
    Incrémentation et décrémentation, à la fois préfixe et postfixe.

^
    Exponentiation (** peut également être utilisé, ainsi que **= pour l'opérateur d'affectation).

+ - !
    Plus unaire, moins unaire et négation logique.

* / %
    Multiplication, division, et modulo.

+ -
    Addition et soustraction.

espace
    Concaténation de chaînes de caractères.


< >
[/col][/row][/table]
<= >=
[/col][/row][/table]
!= ==
    Les opérateurs relationnels attitrés.
~ !~
    Correspondance (négation) d'expressions rationnelles. NOTE : N'utilisez pas d'expression rationnelle constante ( /foo/ ) du côté gauche d'un ~ ou un !~ . N'en utilisez que du côté droit. L'expression /foo/ ~ exp a la même signification que (($0 ~ /foo/) ~ exp). Ce n'est d'habitude pas ce à quoi on s'attendait.

in
    Appartenance à un tableau.

&&
    ET logique.

||
    OU logique.

?:
    L'expression conditionnelle C. Elle a la forme expr1 ? expr2 : expr3c &. Si expr1 est vraie, la valeur de l'expression sera expr2 , sinon elle sera expr3 . Seule une expression entre expr2 et expr3 est évaluée.


= += -=
[/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 :

     .nf if (condition) instruction [ else instruction ] while (condition) instruction do instruction while (condition) for (expr1; expr2; expr3) instruction for (var in tableau) instruction break continue delete tableau^[^indice^] delete tableau^ exit [ expression ] { instructions } .fi


Instructions de/s


Les instruction d'entrée-sortie sont les suivantes :

    close(fichier [, comment]) Fermer un fichier, tube ou co-processus. L'argument optionnel comment 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 "to" (vers), soit "from" (en provenance de).

getline
    Fixer $0 à partir du prochain enregistrement d'entrée ; fixer NF , NR , FNR .

getline < fichier
    Fixer $0 à partir du prochain enregistrement de fichier ; fixer NF .

getline var
    Fixer var à partir du prochain enregistrement d'entrée ; fixer NR , FNR .

getline var < fichier
    Fixer var à partir du prochain enregistrement de fichier .

    commande | getline [var] Exécuter la commande en envoyant la sortie via un tube soit vers $0 soit vers var , comme au-dessus.

    commande |& getline [var] Exécuter la commande en tant que co-processus en envoyant la sortie via un tube soit vers $0 soit vers var , comme au-dessus. Les co-processus sont une extension gawk .

next
    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 END , s'il y en a, sont exécutés.

nextfile
    Arrêter de traiter le fichier d'entrée actuel. Le prochain enregistrement d'entrée lu provient du fichier d'entrée suivant. FILENAME et ARGIND sont mis à jour, FNR 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 END , s'il y en a, sont exécutés.

print
    Affiche l'enregistrement courant. L'enregistrement de sortie est terminé par la valeur de la variable ORS .

print liste-expr
    Affiche des expressions. Chaque expression est séparée par la valeur de la variable OFS . L'enregistrement de sortie est terminé par la valeur de la variable ORS .

print liste-expr > fichier
    Imprime des expressions dans fichier . Chaque expression est séparée par la valeur de la variable OFS . L'enregistrement de sortie est terminé par la valeur de la variable ORS .

printf fmt, liste-expr
    Formater et afficher.

printf fmt, liste-expr > fichier
    Formater et afficher dans fichier .

system( ligne-commandes )
    Exécuter la commande ligne-commandes , et renvoyer la valeur de sortie (ceci peut ne pas être disponible sur des systèmes non *(PX).

    &fflush([fichier^]) Vider tous les tampons associés au fichier de sortie ouvert ou au tube fichier . Si fichier est manquant, alors la sortie standard est vidée. Si fichier 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.


Des redirections d'entrée/sortie additionnelles sont permises pour print et printf .
print ... >> fichier
    concatène la sortie au fichier .

print ... | commande
    Ã©crit dans un tube.

print ... |& commande
    envoie des données à un co-processus.


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
    Un caractère s-1ASCIIs+1. Si l'argument utilisé par %c 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é.

%d , %i
    Un nombre décimal (la partie entière).

%e , %E
    Un nombre flottant de la forme [-]d.dddddde[+^-]dd . Le format %E utilise E au lieu de e .

%f
    Un nombre flottant de la forme [-]ddd.dddddd .

%g , %G
    Utiliser la conversion %e ou %f (prendre la plus courte), les zéros non significatifs étant supprimés. Le format %G utilise %E au lieu de %e .

%o
    Un nombre octal non signé (également un entier).


%u
[table][row]    [col]Un nombre décimal non signé (également un entier).
%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
Utilisateur
Mot de passe
 
Informaticien.be - © 2002-2024 AkretioSPRL  - Generated via Kelare
The Akretio Network: Akretio - Freedelity - KelCommerce - Votre publicité sur informaticien.be ?