Skip to main content

Gawk - Commande Linux - Commande Unix

cours27 Langage de programmation AWK (Juin 2025)

cours27 Langage de programmation AWK (Juin 2025)
Anonim

prénom

gawk - langage d'analyse et de traitement des motifs

Synopsis

rester bouche bée Options de style POSIX ou GNU -F programme-fichier -- fichier …rester bouche bée Options de style POSIX ou GNU -- programme-texte fichier …

pgawk Options de style POSIX ou GNU -F programme-fichier -- fichier …pgawk Options de style POSIX ou GNU -- programme-texte fichier …

La description

Rester bouche bée est la mise en œuvre par le projet GNU du langage de programmation AWK. Il est conforme à la définition du langage dans le standard Langages de commande et utilitaires POSIX 1003.2. Cette version est basée sur la description dans Le langage de programmation AWK , de Aho, Kernighan et Weinberger, avec les fonctionnalités supplémentaires de la version UNIX System V Release 4 awk . Rester bouche bée fournit également des laboratoires Bell plus récents awk extensions, et un certain nombre d'extensions spécifiques à GNU.

Pgawk est la version de profilage de rester bouche bée . Il est identique à tous égards à rester bouche bée , sauf que les programmes s'exécutent plus lentement et produisent automatiquement un profil d'exécution dans le fichier awkprof.out lorsque vous avez terminé. Voir le --profil option ci-dessous.

La ligne de commande comprend des options pour rester bouche bée lui-même, le texte du programme AWK (s'il n'est pas fourni via le -F ou --fichier options) et les valeurs à mettre à disposition dans le ARGC et ARGV variables AWK prédéfinies.

Format d'option

Rester bouche bée Les options peuvent être des options POSIX classiques à une lettre ou des options longues de style GNU. Les options POSIX commencent par un simple `` - '', alors que les options longues commencent par `` - ''. Des options longues sont fournies pour les fonctionnalités spécifiques à GNU et pour les fonctionnalités mandatées par POSIX.

Suivant le standard POSIX, rester bouche bée Des options spécifiques sont fournies via des arguments à la -W option. Plusieurs -W des options peuvent être fournies chaque -W option a une option longue correspondante, comme détaillé ci-dessous. Les arguments pour les options longues sont soit joints à l’option par un = sign, sans espaces intermédiaires, ou ils peuvent être fournis dans le prochain argument de ligne de commande. Les options longues peuvent être abrégées, à condition que l'abréviation reste unique.

Les options

Rester bouche bée accepte les options suivantes, classées par ordre alphabétique.

-F fs

--field-separator fs Utilisation fs pour le séparateur de champ de saisie (la valeur du FS variable prédéfinie).

-v var = val

--attribuer var = val Attribuer la valeur val à la variable var , avant que l'exécution du programme ne commence. De telles valeurs variables sont disponibles pour le COMMENCER bloc d'un programme AWK.

-F programme-fichier

--fichier programme-fichier Lire la source du programme AWK à partir du fichier programme-fichier , au lieu de partir du premier argument de ligne de commande. Plusieurs -F (ou --fichier) des options peuvent être utilisées.

-mf NNN

-m NNN Définir diverses limites de mémoire à la valeur NNN . le F flag définit le nombre maximum de champs, et le r flag définit la taille maximale de l'enregistrement. Ces deux drapeaux et le -m Les options proviennent de la version de recherche de UNIX des laboratoires Bell. awk . Ils sont ignorés par rester bouche bée , puisque rester bouche bée n'a pas de limites prédéfinies.

-W compat

-W traditionnel

--compat

--traditionnel Courir dans compatibilité mode. En mode de compatibilité, rester bouche bée se comporte de manière identique à UNIX awk ; Aucune des extensions spécifiques à GNU n'est reconnue. L'utilisation de --traditionnel est préféré aux autres formes de cette option. Voir EXTENSIONS GNU, ci-dessous, pour plus d'informations.

-W copyleft

-W droit d'auteur

--copyleft

--droits d'auteur Imprimez la version abrégée du message d’information sur les droits d’auteur GNU sur la sortie standard et quittez avec succès.

-W variables de vidage= fichier

--dump-variables= fichier Imprimez une liste triée de variables globales, leurs types et leurs valeurs finales pour fichier . Sinon fichier est fourni, rester bouche bée utilise un fichier nommé awkvars.out dans le répertoire en cours.

Avoir une liste de toutes les variables globales est un bon moyen de rechercher des erreurs typographiques dans vos programmes. Vous utiliseriez également cette option si vous avez un programme volumineux comportant un grand nombre de fonctions et que vous voulez vous assurer que vos fonctions n'utilisent pas par inadvertance des variables globales que vous vouliez être locales. (C’est une erreur particulièrement facile à commettre avec des noms de variables simples comme je, j, etc.)

-W aide

-W utilisation

--Aidez-moi

--usage Imprimez un résumé relativement court des options disponibles sur la sortie standard. (Par le Normes de codage GNU , ces options provoquent une sortie immédiate et réussie.)

-W charpie= fatal

--peluche= fatal Fournit des avertissements sur les constructions douteuses ou non portables vers d'autres implémentations AWK. Avec un argument optionnel de fatal, les avertissements de peluches deviennent des erreurs fatales. Cela peut être drastique, mais son utilisation encouragera certainement le développement de programmes AWK plus propres.

-W lint vieux

- vieux-lint Fournir des avertissements sur les constructions qui ne sont pas portables dans la version d'origine d'Unix awk .

-W gen-po

--gen-po Analysez et analysez le programme AWK et générez un fichier GNU .po fichier de format sur la sortie standard avec des entrées pour toutes les chaînes localisables du programme. Le programme lui-même n'est pas exécuté. Voir le GNU gettext distribution pour plus d'informations sur .po des dossiers.

-W données non décimales

- non-decimal-data Reconnaître les valeurs octales et hexadécimales dans les données d'entrée. Utilisez cette option avec beaucoup de prudence!

-W posix

--posix Cela s'allume compatibilité mode, avec les restrictions supplémentaires suivantes:

*

X les séquences d'échappement ne sont pas reconnues.

*

Seuls les espaces et les tabulations servent de séparateurs de champs lorsque FS est défini sur un seul espace, mais pas de nouvelle ligne.

*

Vous ne pouvez pas continuer de lignes après ? et :.

*

Le synonyme func pour le mot clé une fonction n'est pas reconnu.

*

Les opérateurs ** et **= ne peut pas être utilisé à la place de ^ et ^=.

*

le fflush () fonction n'est pas disponible.

-W profil= prof_file

--profil= prof_file Envoyer les données de profilage à prof_file . La valeur par défaut est awkprof.out. Quand couru avec rester bouche bée , le profil n’est qu’une version «assez imprimée» du programme. Quand couru avec pgawk , le profil contient les comptes d’exécution de chaque instruction du programme dans la marge de gauche et les comptes d’appel de fonction pour chaque fonction définie par l’utilisateur.

-W re-intervalle

--re-intervalle Activer l'utilisation de expressions d'intervalle en correspondance d’expression régulière (voir Expressions régulières, au dessous de). Les expressions d'intervalle n'étaient pas traditionnellement disponibles dans le langage AWK. Le standard POSIX les a ajoutés pour faire awk et egrep compatibles les uns avec les autres. Cependant, leur utilisation est susceptible de briser les anciens programmes AWK, donc rester bouche bée ne les fournit que si elles sont demandées avec cette option, ou lorsque --posix est spécifié.

-W source programme-texte

--la source programme-texte Utilisation programme-texte en tant que code source du programme AWK. Cette option permet de mélanger facilement les fonctions de la bibliothèque (utilisées via le -F et --fichier options) avec le code source saisi sur la ligne de commande. Il est principalement destiné aux programmes AWK de moyenne à grande taille utilisés dans les scripts shell.

-W version

--version Imprimer les informations de version pour cette copie particulière de rester bouche bée sur la sortie standard. Ceci est utile principalement pour savoir si la copie actuelle de rester bouche bée sur votre système est à jour en ce qui concerne tout ce que la Free Software Foundation distribue. Ceci est également utile pour signaler des bogues. (Par le Normes de codage GNU , ces options provoquent une sortie immédiate et réussie.)

-- Signalez la fin des options. Ceci est utile pour permettre aux arguments supplémentaires du programme AWK lui-même de commencer par un `` - ''. Cela concerne principalement la cohérence avec la convention d'analyse des arguments utilisée par la plupart des autres programmes POSIX.

En mode de compatibilité, toutes les autres options sont marquées comme non valides, mais sont sinon ignorées. En fonctionnement normal, tant que le texte du programme est fourni, des options inconnues sont transmises au programme AWK dans le répertoire. ARGV tableau pour le traitement. Ceci est particulièrement utile pour exécuter des programmes AWK via le mécanisme d'interpréteur exécutable `` #! ''.

EXÉCUTION DU PROGRAMME AWK

Un programme AWK consiste en une séquence d'instructions action-modèle et de définitions de fonctions facultatives.

modèle { déclarations d'action }une fonction prénom ( liste de paramètres ) { des déclarations }

Rester bouche bée lit d'abord la source du programme à partir du programme-fichier (s) si spécifié, des arguments à --la source, ou à partir du premier argument sans option sur la ligne de commande. le -F et --la source Les options peuvent être utilisées plusieurs fois sur la ligne de commande. Rester bouche bée lit le texte du programme comme si tout le programme-fichier Les textes source s et ligne de commande ont été concaténés. Ceci est utile pour créer des bibliothèques de fonctions AWK, sans avoir à les inclure dans chaque nouveau programme AWK qui les utilise. Il offre également la possibilité de mélanger des fonctions de bibliothèque avec des programmes en ligne de commande.

La variable d'environnement AWKPATH spécifie un chemin de recherche à utiliser lors de la recherche de fichiers source nommés avec le -F option. 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 rester bouche bée a été construit et installé.) Si un nom de fichier donné à la -F Cette option contient un caractère `` / '', aucune recherche de chemin n’est effectuée.

Rester bouche bée exécute les programmes AWK dans l'ordre suivant. Tout d’abord, toutes les affectations de variables spécifiées via le -v option sont effectuées. Suivant, rester bouche bée compile le programme dans une forme interne. Ensuite, rester bouche bée exécute le code dans le COMMENCER bloc (s) (le cas échéant), puis lit chaque fichier nommé dans le champ ARGV tableau. S'il n'y a pas de fichiers nommés sur la ligne de commande, rester bouche bée lit l'entrée standard.

Si un nom de fichier sur la ligne de commande a la forme var = val il est traité comme une affectation de variable. La variable var sera attribué la valeur val . (Cela se produit après tout COMMENCER Le ou les blocs ont été exécutés.) L'affectation de variables de ligne de commande est particulièrement utile pour affecter dynamiquement des valeurs aux variables utilisées par AWK pour contrôler la manière dont l'entrée est fractionnée en champs et en enregistrements. C'est également utile pour contrôler l'état si plusieurs passes sont nécessaires sur un seul fichier de données.

Si la valeur d'un élément particulier de ARGV est vide (''), rester bouche bée saute dessus.

Pour chaque enregistrement dans l'entrée, rester bouche bée des tests pour voir si elle correspond à tout modèle dans le programme AWK. Pour chaque modèle auquel l’enregistrement correspond, le code associé action est exécuté. Les modèles sont testés dans l'ordre dans lequel ils apparaissent dans le programme.

Enfin, après que toutes les entrées sont épuisées, rester bouche bée exécute le code dans le FIN bloc (s) (le cas échéant).

Variables, enregistrements et champs

Les variables AWK sont dynamiques. ils existent quand ils sont utilisés pour la première fois. Leurs valeurs sont des nombres à virgule flottante ou des chaînes, ou les deux, en fonction de la manière dont elles sont utilisées. AWK a également des tableaux à une dimension; des tableaux à plusieurs dimensions peuvent être simulés. Plusieurs variables prédéfinies sont définies lors de l'exécution d'un programme; ceux-ci seront décrits au besoin et résumés ci-dessous.

Records

Normalement, les enregistrements sont séparés par des caractères de nouvelle ligne. Vous pouvez contrôler la manière dont les enregistrements sont séparés en affectant des valeurs à la variable intégrée. RS. Si RS est un caractère unique, ce caractère sépare les enregistrements. Autrement, RS est une expression régulière. Le texte dans l'entrée qui correspond à cette expression régulière sépare l'enregistrement. Cependant, en mode de compatibilité, seul le premier caractère de sa valeur de chaîne est utilisé pour séparer les enregistrements. Si RS est défini sur la chaîne NULL, les enregistrements sont alors séparés par des lignes vides. Quand RS est défini sur la chaîne NULL, le caractère de nouvelle ligne sert toujours de séparateur de champ, en plus de la valeur FS puis-je avoir.

Des champs

Au fur et à mesure que chaque enregistrement d'entrée est lu, rester bouche bée divise le disque en des champs , en utilisant la valeur de FS variable comme séparateur de champ. Si FS est un caractère unique, les champs sont séparés par ce caractère. Si FS est la chaîne nulle, chaque caractère devient alors un champ séparé. Autrement, FS devrait être une expression régulière complète. Dans le cas particulier que FS est un espace unique, les champs sont séparés par des espaces et / ou des tabulations et / ou des nouvelles lignes. (Mais voir la discussion de --posix, au dessous de). REMARQUE: La valeur de IGNORECASE (voir ci-dessous) affecte également la manière dont les champs sont divisés FS est une expression régulière, et comment les enregistrements sont séparés lorsque RS est une expression régulière.

Si la CHAMPS DE CHAMP variable est définie sur une liste de nombres séparés par des espaces, chaque champ devrait avoir une largeur fixe, et rester bouche bée divise l'enregistrement en utilisant les largeurs spécifiées. La valeur de FS est ignoré. Assigner une nouvelle valeur à FS annule l'utilisation de CHAMPS DE CHAMP, 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 le dossier complet. Les champs n'ont pas besoin d'être référencés par des constantes:

n = 5print $ n

imprime le cinquième champ de l’enregistrement d’entrée.

La variable NF est défini sur le nombre total de champs de l'enregistrement d'entrée.

Références à des champs inexistants (c'est-à-dire des champs après $ NF) produire la chaîne nulle. Cependant, l’affectation à un champ inexistant (par exemple, $ (NF + 2) = 5) augmente la valeur de NF, crée des champs intermédiaires avec la chaîne nulle comme valeur et provoque la valeur de $0 à recalculer, les champs étant séparés par la valeur de OFS. Les références aux champs numérotés négatifs provoquent une erreur fatale. Décrémentation NF provoque la perte des valeurs des champs au-delà de la nouvelle valeur et la valeur de $0 à recalculer, les champs étant séparés par la valeur de OFS.

L'affectation d'une valeur à un champ existant entraîne la reconstruction de tout l'enregistrement lorsque $0 est référencé. De même, attribuer une valeur à $0 permet de redimensionner l’enregistrement, créant de nouvelles valeurs pour les champs.

Variables intégrées

Rester bouche bée Les variables intégrées de sont:

ARGC

Le nombre d’arguments en ligne de commande (n'inclut pas les options pour rester bouche bée , ou la source du programme).

ARGIND

L'index dans ARGV du fichier en cours de traitement.

ARGV

Tableau d'arguments en ligne de commande. 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 fichiers. Les valeurs numériques 1, 2 ou 3 spécifient que les fichiers d'entrée, les fichiers de sortie ou tous les fichiers, respectivement, doivent utiliser des E / S binaires. Valeurs de chaîne de "r", ou "w" spécifiez que les fichiers d'entrée, ou les fichiers de sortie, respectivement, doivent utiliser des E / S binaires. Valeurs de chaîne de "rw" ou "wr" spécifiez que tous les fichiers doivent utiliser des E / S binaires. Toute autre valeur de 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 (par exemple,ENVIRON "HOME" pourrait être / home / arnold). Changer ce tableau n’affecte pas l’environnement vu par les programmes qui rester bouche bée frai via la redirection ou la système()une fonction.

ERRNO

Si une erreur système se produit, effectuez une redirection pour getline, lors d'une lecture pour getline, ou pendant un Fermer(), puis ERRNO contiendra une chaîne décrivant l'erreur. La valeur est sujette à la traduction dans les paramètres régionaux non anglais.

CHAMPS DE CHAMP

Une liste de largeurs de champ séparées par des espaces. Lorsque défini, rester bouche bée analyse l’entrée dans des champs de largeur fixe, au lieu d’utiliser la valeur de FS variable comme séparateur de champ.

NOM DE FICHIER

Le nom du fichier d'entrée actuel.Si aucun fichier n'est spécifié sur la ligne de commande, la valeur de NOM DE FICHIER est "-". cependant, NOM DE FICHIER est indéfini à l'intérieur du COMMENCER bloquer (sauf si défini par getline).

FNR

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

FS

Le séparateur de champ de saisie, un espace par défaut. Voir Des champs, au dessus de.

IGNORECASE

Contrôle la sensibilité à la casse de toutes les opérations d'expressions régulières et de chaînes. Si IGNORECASE a une valeur non nulle, puis des comparaisons de chaînes et une correspondance de modèle dans les règles, la division de champ avec FS, enregistrement séparant avec RS, expression régulière correspondant à ~et !~, et le gensub (), gsub (), indice(), rencontre(), Divisé(), et sous() les fonctions intégrées ignorent toutes la casse lors des opérations d’expression régulière. REMARQUE: La souscription de tableau est ne pas affecté, ni le un tri() une fonction.

Donc, si IGNORECASE n'est pas égal à zéro, /un B/ correspond à toutes les chaînes "un B", "un B","Un B", et "UN B". Comme pour toutes les variables AWK, la valeur initiale de IGNORECASE est égal à zéro, donc toutes les expressions régulières et les opérations sur les chaînes sont normalement sensibles à la casse. Sous Unix, le jeu complet de caractères ISO 8859-1 Latin-1 est utilisé pour ignorer la casse.

PELUCHE

Fournit un contrôle dynamique de la --peluche option depuis un programme AWK. Quand c'est vrai rester bouche bée imprime les avertissements de peluches. Quand c'est faux, ça ne marche pas. Quand assigné la valeur de chaîne "fatal", les avertissements de peluches deviennent des erreurs fatales, exactement comme --lint = fatal. Toute autre valeur vraie ne fait qu'imprimer des avertissements.

NF

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

NR

Le nombre total d'enregistrements d'entrée vus jusqu'à présent.

OFMT

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

OFS

Le séparateur de champ en sortie, un espace par défaut.

SRO

Le séparateur d'enregistrement de sortie, par défaut une nouvelle ligne.

PROCINFO

Les éléments de ce tableau permettent d'accéder à des informations sur le programme AWK en cours d'exécution. Sur certains systèmes, il peut y avoir des éléments dans le tableau, "groupe 1" à travers "groupe n ' pour certains n , qui est le nombre de groupes supplémentaires que le processus a. Utilisez le dans opérateur pour tester ces éléments. Les éléments suivants sont garantis disponibles:

PROCINFO "egid"

la valeur de la s'égarer (2) appel système.

PROCINFO "euid"

la valeur de la geteuid (2) appel système.

PROCINFO "FS"

"FS" si division du champ avec FS est en vigueur, ou "CHAMPS DE TERRAIN" si division du champ avec CHAMPS DE CHAMP est en vigueur.

PROCINFO "gid"

la valeur de la obtenir (2) appel système.

PROCINFO "pgrpid"

l'identifiant du groupe de processus du processus en cours.

PROCINFO "pid"

l'identifiant du processus en cours.

PROCINFO "ppid"

l'ID de processus parent du processus en cours.

PROCINFO "uid"

la valeur de la getuid (2) appel système.

RS

Le séparateur d'enregistrement d'entrée, par défaut une nouvelle ligne.

RT

Le terminateur d'enregistrement. Rester bouche bée ensembles RT au texte d'entrée correspondant au caractère ou à l'expression régulière spécifié par RS.

RSTART

L'index du premier caractère auquel correspond rencontre(); 0 si pas de correspondance. (Cela implique que les index de caractère commencent à un.)

RLENGTH

La longueur de la chaîne correspondante par rencontre(); -1 si pas de correspondance.

SOUSSEP

Le caractère utilisé pour séparer plusieurs indices en éléments de tableau, par défaut ' 034'.

TEXTDOMAIN

Le domaine de texte du programme AWK; utilisé pour trouver les traductions localisées des chaînes du programme.

Tableaux

Les tableaux sont indexés avec une expression entre crochets ( et ). Si l'expression est une liste d'expressions ( expr , expr …) alors l’indice de tableau est une chaîne constituée de la concaténation de la valeur (chaîne) de chaque expression, séparées par la valeur du SOUSSEP variable. Cette fonctionnalité est utilisée pour simuler des tableaux à plusieurs dimensions. Par exemple:

i = "A"; j = "B"; k = "C"x i, j, k = "bonjour, monde n"

assigne la chaîne "bonjour, monde n" à l'élément du tableau X qui est indexé par la chaîne"A 034B 034C". Tous les tableaux de AWK sont associatifs, c'est-à-dire indexés par des valeurs de chaîne.

L'opérateur spécial dans peut être utilisé dans un si ou tandis que instruction pour voir si un tableau a un index composé d'une valeur particulière.

if (val dans un tableau) print array val

Si le tableau a plusieurs indices, utilisez (i, j) dans le tableau.

le dans construire peut également être utilisé dans un pour boucle pour parcourir tous les éléments d'un tableau.

Un élément peut être supprimé d'un tableau à l'aide de la touche effacer déclaration. le effacer Cette instruction peut également être utilisée pour supprimer l’intégralité du contenu d’un tableau, en spécifiant simplement le nom du tableau sans indice.

Variable Typing And Conversion

Les variables et les champs peuvent être des nombres (à virgule flottante), des chaînes ou les deux. La façon dont la valeur d'une variable est interprétée dépend de son contexte. S'il est utilisé dans une expression numérique, il sera traité comme un nombre. S'il est utilisé comme une chaîne, il sera traité comme une chaîne.

Pour forcer une variable à être traitée comme un nombre, ajoutez-y 0; pour le forcer à être traité comme une chaîne, concaténez-le avec la chaîne nulle.

Lorsqu'une chaîne doit être convertie en nombre, la conversion est effectuée à l'aide de strtod (3). Un nombre est converti en chaîne en utilisant la valeur de CONVFMT comme chaîne de format pour sprintf (3), avec la valeur numérique de la variable comme argument. Cependant, même si tous les nombres dans AWK sont des nombres à virgule flottante, les valeurs intégrales sont toujours converti en nombres entiers. Ainsi, étant donné

CONVFMT = "% 2.2f" a = 12 b = a ""

la variable b a une valeur de chaîne de '12' et pas '12.00'.

Rester bouche bée effectue les comparaisons comme suit: Si deux variables sont numériques, elles sont comparées numériquement. Si une valeur est numérique et que l'autre a une valeur de chaîne qui est une "chaîne numérique", les comparaisons sont également effectuées numériquement. Sinon, la valeur numérique est convertie en chaîne et une comparaison de chaîne est effectuée. Bien entendu, deux chaînes sont comparées en tant que chaînes. Notez que la norme POSIX applique le concept de `` chaîne numérique '' partout, même aux constantes de chaîne. Cependant, cela est clairement incorrect et rester bouche bée ne fait pas cela. (Heureusement, cela est corrigé dans la prochaine version de la norme.)

Notez que les constantes de chaîne, telles que '57', sont ne pas chaînes numériques, ce sont des constantes de chaîne. L'idée de «chaîne numérique» ne s'applique qu'aux champs, getline contribution, NOM DE FICHIER, ARGV éléments, ENVIRON les éléments et les éléments d'un tableau créé par Divisé() qui sont des chaînes numériques. L'idée de base est que entrée utilisateur , et seule l’entrée utilisateur, 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 chaîne "" (la chaîne nulle ou vide).

Constantes octales et hexadécimales

À partir de la version 3.1 de gawk, vous pouvez utiliser des constantes octal et hexadécimales de style C dans le code source de votre programme AWK. Par exemple, la valeur octale 011 est égal à décimal 9et la valeur hexadécimale 0x11 est égal à 17 décimal.

Constantes de chaîne

Les constantes de chaîne dans AWK sont des séquences de caractères placées entre guillemets doubles ('). Dans les cordes, certains Séquences d'échappement sont reconnus, comme en C. Ce sont:

\

Un backslash littéral.

une

Le caractère "alerte"; généralement le caractère ASCII BEL.

b

retour arrière.

F

formulaire d'alimentation.

n

nouvelle ligne.

r

retour de chariot.

t

onglet horizontal.

v

onglet vertical.

X chiffres hexadécimaux

Le caractère représenté par la chaîne de chiffres hexadécimaux suivant le X. Comme dans ANSIC, tous les chiffres hexadécimaux suivants sont considérés comme faisant partie de la séquence d'échappement. (Cette fonctionnalité devrait nous en dire plus sur la conception de la langue par un comité.) " x1B" est le caractère ASCIIESC (échappement).

ddd

Caractère représenté par la séquence de chiffres octaux à 1, 2 ou 3 chiffres. Par exemple., ' 033' est le caractère ASCII ESC (échappement).

c

Le caractère littéral c .

Les séquences d'échappement peuvent également être utilisées dans des expressions régulières constantes (par exemple,/ t f n r v / correspond aux caractères d'espacement).

En mode de compatibilité, les caractères représentés par des séquences d'échappement octales et hexadécimales sont traités littéralement lorsqu'ils sont utilisés dans des constantes d'expressions régulières. Ainsi, / a 52b / est équivalent à/un B/.

Patterns et Actions

AWK est un langage orienté ligne. Le motif vient en premier, puis l'action. Les déclarations d'action sont incluses dans { et }. Soit le motif manque, soit l'action manque, mais bien sûr, pas les deux. Si le modèle est manquant, l'action est exécutée pour chaque enregistrement d'entrée. Une action manquante équivaut à

{ impression }

qui imprime l'intégralité de l'enregistrement.

Les commentaires commencent par le caractère "#" et se poursuivent jusqu'à la fin de la ligne. Des lignes vides peuvent être utilisées pour séparer les déclarations. Normalement, une instruction se termine par une nouvelle ligne, cependant, ce n'est pas le cas pour les lignes se terminant par un `, ', {, ?, :, &&, ou ||. Lignes se terminant par faire ou autre ont également leurs déclarations automatiquement repris à la ligne suivante. Dans d'autres cas, une ligne peut être poursuivie en la terminant par un ', auquel cas la nouvelle ligne sera ignorée.

Plusieurs déclarations peuvent être placées sur une ligne en les séparant par un «;». Ceci s'applique à la fois aux déclarations de la partie action d'une paire motif-action (le cas habituel) et aux déclarations de motif-action elles-mêmes.

Les motifs

Les modèles AWK peuvent être l’un des suivants:

COMMENCER FIN / expression régulière / expression relationnelle modèle && modèle modèle || modèle modèle ? modèle : modèle ( modèle ) ! modèle modèle1 , pattern2

COMMENCER et FIN Il existe deux types spéciaux de modèles qui ne sont pas testés par rapport à l’entrée. Les pièces d'action de tous COMMENCER les modèles sont fusionnés comme si toutes les déclarations avaient été écrites en un seul COMMENCER bloc. Ils sont exécutés avant la lecture de toute entrée. De même, tous les FIN les blocs sont fusionnés et exécutés lorsque toutes les entrées sont épuisées (ou lorsqu'un fichier sortie déclaration est exécutée). COMMENCER et FIN les modèles ne peuvent pas être combinés avec d'autres modèles dans les expressions de modèle. COMMENCER et FIN les motifs ne peuvent pas avoir de parties d'action manquantes.

Pour / expression régulière / patterns, l'instruction associée est exécutée pour chaque enregistrement d'entrée correspondant à l'expression régulière. Les expressions régulières sont les mêmes que celles de egrep (1), et sont résumés ci-dessous.

UNE expression relationnelle pouvez utiliser n’importe lequel des opérateurs définis ci-dessous dans la section Actions. Celles-ci testent généralement si certains champs correspondent à certaines expressions régulières.

le &&, ||, et ! les opérateurs sont respectivement AND logique, OR logique et NOT logique, comme en C. Ils effectuent également une évaluation de court-circuit, comme en C, et sont utilisés pour combiner des expressions de modèle plus primitives. Comme dans la plupart des langues, les parenthèses peuvent être utilisées pour modifier l'ordre d'évaluation.

le ?: L'opérateur est semblable au même opérateur en C. Si le premier motif est vrai, le motif utilisé pour le test est le deuxième motif, sinon c'est le troisième. Un seul des deuxième et troisième modèles est évalué.

le modèle1 , pattern2 forme d'une expression est appelée une modèle de plage . Il correspond à tous les enregistrements d'entrée commençant par un enregistrement correspondant modèle1 et se poursuivant jusqu’à ce que le disque corresponde pattern2 , inclus. Il ne se combine à aucun autre type d'expression de modèle.

Expressions régulières

Les expressions régulières sont le type étendu trouvé dans egrep . Ils sont composés de caractères comme suit:

c

correspond au non métacaractère c .

c

correspond au caractère littéral c .

.

correspond à n'importe quel caractère comprenant nouvelle ligne.

^

correspond au début d'une chaîne.

$

correspond à la fin d'une chaîne.

abc…

liste de caractères, correspond à n'importe lequel des caractères abc… .

^ abc…

liste de caractères refusée, correspond à n’importe quel caractère sauf abc… .

r1 | r2

alternance: correspond soit à r1 ou r2 .

r1r2

concaténation: allumettes r1 , et alors r2 .

r +

correspond à un ou plusieurs r 's

r *

correspond à zéro ou plus r 's

r ?

correspond à zéro ou à un r 's

( r )

groupement: allumettes r .

r { n }

r { n ,}

r { n , m } Un ou deux chiffres à l'intérieur des accolades indiquent un expression d'intervalle . S'il y a un nombre entre les accolades, l'expression régulière précédente r est répété n fois. S'il y a deux nombres séparés par une virgule, r est répété n à m fois. S'il y a un numéro suivi d'une virgule, alors r est répété au moins n fois.

Les expressions d'intervalle ne sont disponibles que si --posix ou --re-intervalle est spécifié sur la ligne de commande.

y

correspond à la chaîne vide au début ou à la fin d'un mot.

B

correspond à la chaîne vide dans un mot.

<

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

>

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

w

correspond à tout caractère constituant du mot (lettre, chiffre ou trait de soulignement).

W

correspond à tout caractère qui n'est pas constitutif du mot.

`

correspond à la chaîne vide au début d'un tampon (chaîne).

'

correspond à la chaîne vide à la fin d'un tampon.

Les séquences d'échappement valides dans les constantes de chaîne (voir ci-dessous) sont également valides dans les expressions régulières.

Cours de caractère sont une nouvelle fonctionnalité introduite dans le standard POSIX. Une classe de caractères est une notation spéciale permettant de décrire des listes de caractères ayant un attribut spécifique, mais où les caractères eux-mêmes peuvent varier d'un pays à l'autre et / ou d'un jeu de caractères à un autre. Par exemple, la notion de caractère alphabétique diffère aux États-Unis et en France.

Une classe de caractères n'est valide que dans une expression régulière à l'intérieur les crochets d'une liste de caractères. Les classes de personnage consistent en :, un mot clé désignant la classe, et :. Les classes de caractères définies par le standard POSIX sont les suivantes:

: alnum:

Caractères alphanumériques.

:alpha:

Caractères alphabétiques.

:blanc:

Caractères d'espace ou de tabulation.

: cntrl:

Caractères de contrôle.

:chiffre:

Caractères numériques.

:graphique:

Caractères imprimables et visibles. (Un espace est imprimable, mais non visible, alors qu'un une est les deux.)

:inférieur:

Caractères alphabétiques minuscules.

:impression:

Caractères imprimables (caractères qui ne sont pas des caractères de contrôle.)

: punct:

Caractères de ponctuation (caractères qui ne sont pas des lettres, des chiffres, des caractères de contrôle ou des espaces).

:espace:

Caractères d'espace (tels que espace, tabulation et saut de page, pour en nommer quelques-uns).

:plus haut:

Caractères alphabétiques en majuscules.

: xdigit:

Caractères en chiffres hexadécimaux.

Par exemple, avant la norme POSIX, pour faire correspondre les caractères alphanumériques, vous auriez dû écrire / A-Za-z0-9 /. Si votre jeu de caractères contenait d'autres caractères alphabétiques, cela ne les correspondrait pas et si votre jeu de caractères assemblé différemment d'ASCII, il est possible que cela ne corresponde pas aux caractères alphanumériques ASCII. Avec les classes de caractères POSIX, vous pouvez écrire/ : alnum: /, et cela correspond aux caractères alphabétiques et numériques de votre jeu de caractères.

Deux séquences spéciales supplémentaires peuvent apparaître dans les listes de caractères. Celles-ci s’appliquent aux jeux de caractères non-ASCII, qui peuvent avoir un seul symbole (appelé éléments d'assemblage ) représentés avec plus d'un caractère, ainsi que plusieurs caractères équivalents pour assembler , ou le tri, fins. (Par exemple, en français, un «e» et un e accentués dans une tombe sont équivalents.)

Assembler des symboles

Un symbole de classement est un élément de classement multi-caractères inclus dans . et .. Par exemple, si ch est un élément d'assemblage, alors .ch. est une expression régulière qui correspond à cet élément de classement, tandis que ch est une expression régulière qui correspond à c ou h.

Classes d'équivalence

Une classe d'équivalence est un nom spécifique aux paramètres régionaux pour une liste de caractères équivalents. Le nom est inclus dans = et =. Par exemple, le nom e pourrait être utilisé pour représenter tous les "e", "" e "," et "" e "." Dans ce cas, = e = est une expression régulière qui correspond à l'un des e, e ', ou e`.

Ces fonctionnalités sont très utiles dans les pays non anglophones. La bibliothèque fonctionne rester bouche bée utilise pour la correspondance d'expression régulière actuellement ne reconnaît que les classes de caractères POSIX; ils ne reconnaissent pas les symboles de classement ni les classes d'équivalence.

le y, B, <, >, w, W, `, et ' les opérateurs sont spécifiques à rester bouche bée ; ce sont des extensions basées sur des installations dans les bibliothèques d’expressions régulières GNU.

Les différentes options de ligne de commande contrôlent la rester bouche bée interprète les caractères dans les expressions régulières.

Aucune option

Dans le cas par défaut, rester bouche bée fournit toutes les fonctionnalités des expressions régulières POSIX et des opérateurs d’expression régulière GNU décrits ci-dessus. Cependant, les expressions d'intervalle ne sont pas prises en charge.

--posix

Seules les expressions régulières POSIX sont supportées, les opérateurs GNU ne sont pas spéciaux. (Par exemple., w correspond à un littéral w). Les expressions d'intervalle sont autorisées.

--traditionnel

Unix traditionnel awk les expressions régulières sont appariées. Les opérateurs GNU ne sont pas spéciaux, les expressions d'intervalle ne sont pas disponibles, pas plus que les classes de caractères POSIX (: alnum: etc). Les caractères décrits par des séquences d'échappement octales et hexadécimales sont traités littéralement, même s'ils représentent des métacaractères d'expression régulière.

--re-intervalle

Autoriser les expressions d'intervalle dans les expressions régulières, même si --traditionnel a été fourni.

actes

Les déclarations d'action sont entourées d'accolades, { et }. Les instructions d'action sont constituées des assignations habituelles, des instructions conditionnelles et des instructions en boucle trouvées dans la plupart des langues. Les opérateurs, les instructions de contrôle et les instructions d'entrée / sortie disponibles sont structurés d'après ceux de C.

Les opérateurs

Les opérateurs dans AWK, par ordre de priorité décroissant, sont

()

Regroupement

$

Référence du champ.

++ --

Incrémenter et décrémenter, les préfixes et postfixes.

^

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

+ - !

Plus unaire, moins unaire et négation logique.

* / %

Multiplication, division et module.

+ -

Addition et soustraction.

espace

Concaténation de chaînes.

< >

<= >=

!= == Les opérateurs relationnels réguliers.

~ !~

Correspondance d'expression régulière, correspondance annulée. REMARQUE: N'utilisez pas une expression régulière constante (/ foo /) sur le côté gauche d'un ~ ou !~. N'en utilisez qu'un sur le côté droit. L'expression / foo / ~ exp a la même signification que (($ 0 ~ / foo /) ~ exp ). Ceci est généralement ne pas ce qui était prévu.

dans

Adhésion à un tableau.

&&

ET logique

||

OU logique.

?:

L'expression conditionnelle en C Cela a la forme expr1 ? expr2 : expr3 . Si expr1 est vrai, la valeur de l'expression est expr2 sinon c'est expr3 . Un seul des expr2 et expr3 est évalué.

= += -=

*= /= %= ^= Affectation. Les deux mission absolue ( var = valeur ) et l'opérateur-assignation (les autres formes) sont pris en charge.

Déclarations de contrôle

Les instructions de contrôle sont les suivantes:

si ( état ) déclaration autre déclaration tandis que ( état ) déclaration faire déclaration tandis que ( état ) pour ( expr1 ; expr2 ; expr3 ) déclaration pour ( var dans tableau ) déclaration Pause continuer effacer tableau indice effacer tableau sortie expression { des déclarations }

Instructions I / O

Les instructions d'entrée / sortie sont les suivantes:

Fermer( fichier , Comment )

Fermer le fichier, pipe ou co-processus. L'option Comment ne doit être utilisé que lors de la fermeture d'une extrémité d'un tuyau bidirectionnel à un processus commun. Ce doit être une valeur de chaîne, soit "à" ou "de".

getline

Ensemble $0 à partir du prochain enregistrement d'entrée; ensemble NF, NR, FNR.

getline < fichier

Ensemble $0 du prochain enregistrement de fichier ; ensemble NF.

getline var

Ensemble var à partir du prochain enregistrement d'entrée; ensemble NR, FNR.

getline var < fichier

Ensemble var du prochain enregistrement de fichier .

commander | getline var

Courir commander passe la sortie soit dans $0 ou var , comme ci-dessus.

commander | & getline var

Courir commander en tant que co-processus canalisant la sortie soit dans $0 ou var , comme ci-dessus. Les co-processus sont un rester bouche bée extension.

suivant

Arrête le traitement de l'enregistrement en cours. L'enregistrement suivant est lu et le traitement reprend avec le premier motif du programme AWK. Si la fin des données d'entrée est atteinte, le FIN les blocs, le cas échéant, sont exécutés.

nextfile

Arrête le traitement du fichier d'entrée actuel. L'enregistrement d'entrée suivant lu provient du fichier d'entrée suivant. NOM DE FICHIER et ARGIND sont mis à jour, FNR est remis à 1 et le traitement reprend avec le premier motif du programme AWK. Si la fin des données d'entrée est atteinte, le FIN les blocs, le cas échéant, sont exécutés.

impression

Imprime l'enregistrement en cours. L’enregistrement de sortie est terminé par la valeur de SRO variable.

impression expr-list

Imprime des expressions. Chaque expression est séparée par la valeur du OFS variable. L’enregistrement de sortie est terminé par la valeur de SRO variable.

impression expr-list > fichier

Imprime des expressions sur fichier . Chaque expression est séparée par la valeur du OFS variable. L’enregistrement de sortie est terminé par la valeur de SRO variable.

printf fmt, expr-list

Formater et imprimer.

printf fmt, expr-list > fichier

Formater et imprimer sur fichier .

système( cmd-line )

Exécuter la commande cmd-line et retourne le statut de sortie. (Cela peut ne pas être disponible sur des systèmes non-POSIX.)

fflush ( fichier )

Vide tous les tampons associés au fichier de sortie ou au canal ouvert fichier . Si fichier est manquant, la sortie standard est purgée. Si fichier est la chaîne null, alors tous les fichiers de sortie ouverts et les pipes ont leurs tampons vidés.

Des redirections de sortie supplémentaires sont autorisées pour impression et printf.

imprimer … >> fichier

ajoute la sortie au fichier .

imprimer … | commander

écrit sur un tuyau.

imprimer … | commander

envoie des données à un co-processus.

le getline La commande retourne 0 en fin de fichier et -1 en cas d'erreur. En cas d'erreur, ERRNO contient une chaîne décrivant le problème.

REMARQUE: Si vous utilisez un tuyau ou un co-processus pour getlineou de impression ou printf dans une boucle, vous doit utilisation Fermer() pour créer de nouvelles instances de la commande. AWK ne ferme pas automatiquement les tuyaux ni ne co-traite lorsqu'ils retournent EOF.

La déclaration printf

Les versions AWK du printf