====== awk-synthèse ====== * Objet : tableaux récapitulatifs * Niveau requis : {{tag>débutant avisé}} * Commentaires : //Contexte d'utilisation du sujet du tuto. // =====Variables prédéfinies===== ===Celles en mémoire dès le lancement de la commande === Voici les variables internes du langage awk présentes en mémoire dès le lancement de la commande. ^Variables ^Significations ^Valeurs par défaut ^ |ARGC |Nombre d'arguments de la ligne de commande |- | |ARGV |Tableau des arguments de la ligne de commande|- | |FS |Séparateur de champs en entrée|" "| |NF |Nombre de champs de l'enregistrement courant|-| |OFMT |Format de sortie des nombres|"%.6g"| |OFS |Séparateur de champs pour la sortie|" "| |ORS |Séparateur d'enregistrement pour la sortie|"\n"| |RLENGTH |Longueur de la chaîne trouvée|-| |RS |Séparateur d'enregistrement en entrée|"\n"| |RSTART |Positionnée par la fonction match :début de la chaîne trouvée|-| |SUBSEP |Séparateur des éléments dans un tableau|"\034"| ===Celles initialisées lors du traitement d'une ligne === Les enregistrements sont traités successivement.\\ L'enregistrement est automatiquement découpé en champs et un certain nombre de variables internes awk sont alors initialisées.\\ Les voici : ^ ^ ^ |$0|Valeur de l'enregistrement courant| |NF |Nombre de champs de l'enregistrement courant| |$1 $2 ... $NF|$1 : champ n°1\\ $2 champ n°2\\ $NF : valeur du dernier champ| |NR |Indice de l'enregistrement courant\\ (NR vaut 1 quand la première ligne est lu, et s'incrémente à chaque enregistrement.)| |FNR|Indice de l'enregistrement courant relatif au fichier en cours de traitement| |FILENAME |Nom du fichier en cours de traitement| ===== Opérateurs de tests ===== ===Les opérateurs de tests === ^Opérateurs ^Significations ^ |**==** |égale à (binaire) | |**!=** |différent de (binaire)| |**<=** |inférieur ou égale à (binaire) | |**>=** |supérieur ou égale à (binaire) | |**<** |inférieur à (binaire)| |**>** |supérieur à (binaire)| |**~** |correspondance avec ER (binaire)| |**!~** |non-correspondance avec ER (binaire)| |**!** |négation | |**&&** |ET logique | |**||** |OU logique | |**(expression)** |regroupement | =====Les fonctions prédéfinies===== ===Les fonctions de traitement de chaînes=== Les fonctions de traitement de chaînes de caractères proposées par awk sont regroupées dans le tableau suivant : ^Nom de la fonction et arguments ^Description du travail effectué ^Valeur renvoyée ^ |**Recherche et extraction de sous chaînes** ||| |substr(s,p) | Extrait la fin de la chaîne s commençant à la position p | La sous chaîne en question | |substr(s,p,n) | Extrait la sous chaîne de s de longueur n et commençant à la position p. Cette fonction est souvent utilisée pour obtenir les n premiers caractères d'une chaîne en fixant p à 1.|La sous chaîne en question.| |index(s,t)|Recherche la chaîne t dans la chaîne s|La position de la première occurrence de t dans s, 0 si t n'appartient pas à s| |**Fonctions à usage général** ||| |length(s)|Longueur d'une chaîne|Longueur de la chaîne passée en paramètre| |match(s,r)|Effectue un test de reconnaissance du motif r sur la chaîne s|Si la chaîne s est reconnue par le motif r, la position du premier caractère associé à la reconnaissance est renvoyée.\\ En cas d'échec, la fonction renvoie 0.\\ En outre les variables prédéfinies RSTART et RLENGTH sont respectivement associées à la position du premier caractère de reconnaissance (identique à la valeur de retour) et à la longueur de la partie de s reconnue par le motif r.| |sprintf(format,...)|Effectue le même travail que la fonction du même nom en C i.e. créée une chaîne sur le modèle format en substituant les caractères spéciaux par les argument à la suite format en suivant le même formalisme que printf | La chaîne issue des substitutions.| |**Fonctions de substitution** ||| |sub(r,s)|Remplace la première occurrence de r par s à l'intérieur du tampon de travail courant ($0)|Nombre de substitutions effectuées, c'est à dire 0 ou 1.| |sub(r,s,t)|Remplace la première occurrence de r par s à l'intérieur de la chaîne t|Nombre de substitutions effectuées, c'est à dire 0 ou 1.| |gsub(r,s)|Remplace toutes les occurrences de r par s à l'intérieur du tampon de travail courant ($0)|Nombre de substitutions effectuées, de 0 à n.| |gsub(r,s,t)|Remplace toutes les occurrences de r par s à l'intérieur de la chaîne t|Nombre de substitutions effectuées, de 0 à n.| |**Chaînes et tableaux** ||| |split(s,tab)|Découpe la chaîne s en champs (respectivement au(x) séparateur(s) indiqués par la variable prédéfinie FS) et place ces derniers dans le tableau tab.|Nombre de champs obtenus| |split(s,tab,sep)|Découpe la chaîne s en champs (respectivement au(x) séparateur(s) indiqués par sep) et place ces derniers dans le tableau tab.|Nombre de champs obtenus| Attention aux faux amis ! **substr** ne signifie pas substitution (c'est le travail de sub et gsub) mais «__ extraction de sous chaîne__ ». ===Les fonctions arithmétiques=== Le langage de programmation awk propose en standard la plupart des fonctions arithmétiques communes.\\ Elles sont répertoriées dans le tableau suivant :\\ ^ ^ ^ |atan2(y,x)|Renvoie l'angle formé par x et y, soit, grosso modo, l'arc tangente de y/x| |cos(x)|Cosinus de x| |sin(x)|Sinus de x| |log(x)|Logarithme népérien de x| |exp(x)|Exponentielle de x| |sqrt(x)|Racine carrée de x| |int(x)|Partie entière de x| |rand(x)|Génère un nombre pseudo aléatoire x, tel que 0 <=x < 1 | |srand(x)|Fixe la racine du générateur à x| =====Les opérateurs arithmétiques ===== ^Opérateurs ^Signification ^ |+ | addition | |- | soustraction | |* | multiplication | |/ | division | |% | modulo | |^ | exponentiation | |++ (unitaire) | incrémentation | |- - (unitaire) | décrémentation | |+= | x += y équivaut à x = x + y | |- = |x-=y équivaut à x = x - y| |*= |x*=y équivaut à x = x * y | |/= |x/=y équivaut à x = x / y | |%= |x%=y équivaut à x = x % y | |^= |x^=y équivaut à x = x ^ y | =====Tableaux récapitulatif des contrôleurs et modificateurs de formats ===== ====Tableau des contrôleurs de format ==== ^Contrôleurs de format ^Explications ^Exemples de contenu\\ de la variable $n ^Format d'apparition de la variable ^ |%s | Toute chaîne de caractères. | Pour n correspondant à "toto"\\ ("%s", $n) | 'toto' | |%xs | Exemple, avec modificateur de format | Pour n correspondant à "toto"\\ ("%10s", $n)| ' toto' | |%xs | Autre exemple, avec modificateur de format | Pour n correspondant à "toto"\\ ("%.s", $n) | 'tot' | |%c | Imprime un nombre comme un caractère ASCII. | Pour n correspondant à 65\\ ("%c", $n)\\ Pour n correspond à 83\\ ("%c", $n) | la lettre 'A'\\ la lettre 's' | |%d | La partie entière d'un nombre décimal | Pour n=18.5\\ ("%d", $n) | '18' | |%xd | Exemple avec modificateur de format\\ Précision du nombre de chiffres | Pour n=18.5\\ ("%5d", $n) | '18' | |% i | Équivalents de%d : Tous deux imprime un entier décimal.\\ Le% i est pour la compatibilité avec ISO C ||| |%e | Nombre réel sous la forme [-]d.ddddddE[+/-]dd | Pour n=83,5\\ ("%e", $n) | '8.350000e+01' | |%f | Nombre réel sous la forme [-]ddd.dddddd. | Pour n=83,5\\ ("%e", $n) | '83.500000' | |%g | Le plus court entre e et f avec suppression des zéros. | Pour n=83,5\\ ("%g", $n) | '83,5' | |%o | Nombre octal non signé. | Pour n=83,5\\ ("%g", $n) | '123' | |%x | Nombre hexadécimal non signé. | Pour n=83,5\\ ("%g", $n) |'53'| |%% | Écriture d'un % si aucun argument n'est présent ||| ====Tableau des principaux modificateurs de contrôleur ==== ^Modificateurs ^Significations ^ |n largeur | Il s'agit d'un numéro spécifiant la largeur minimale souhaitée d'un champ.\\ On la place ainsi ''%nContrôleur'' | |période\\ . (point) ou n\\ avec pour n une valeur numérique | Suivie d'une constante entière, une période indique la précision à utiliser lors de l'impression.\\ Le sens de la précision varie selon le contrôleur. | |%.e , %.f |aucun chiffre à droite de la virgule décimale. | |%ng | n nombre(s) maximum de chiffre(s) significatif(s) | |%nd , %ni , %no , %nx | n nombre(s) minimum de chiffre(s) à imprimer.| |%ns | n nombre(s) maximum de caractère(s) (pour une chaîne) à imprimer. | |- | Le signe moins, utilisés avant le modificateur de 'largeur', permet de justifier à gauche. | | espace | Pour les conversions numériques, précéder les valeurs positives d'un espace\\ et des valeurs négatives avec un signe moins. | |+ | Le signe plus, utilisé avant le largeur modificateur de 'largeur',\\ dit de toujours fournir un signe pour les conversions numériques,\\ même si les données du format sont positives.\\ Le '+' l'emporte sur le modificateur de l'espace.| | 0 | Un leader '0' (zéro) agit comme un drapeau qui indique que la sortie devrait être complétée par des zéros au lieu d'espaces.\\ Cela s'applique même aux formats de sortie non numériques. | |# | Utilisez une "autre forme" pour certaines lettres de commande. |