Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
utilisateurs:hypathie:tutos:awk-synthese [02/08/2014 19:42] Hypathie [Les fonctions prédéfinies] |
utilisateurs:hypathie:tutos:awk-synthese [06/08/2014 08:40] Hypathie [Variables prédéfinies] |
||
---|---|---|---|
Ligne 7: | Ligne 7: | ||
=====Variables prédéfinies===== | =====Variables prédéfinies===== | ||
===Celles en mémoire dès le lancement de la commande === | ===Celles en mémoire dès le lancement de la commande === | ||
- | Voici les variables internes du langage awk présente 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 ^ | ^Variables ^Significations ^Valeurs par défaut ^ | ||
Ligne 22: | Ligne 22: | ||
|SUBSEP |Séparateur des éléments dans un tableau|"\034"| | |SUBSEP |Séparateur des éléments dans un tableau|"\034"| | ||
- | ===Celles initialisées lors du traitement d'un ligne === | + | ===Celles initialisées lors du traitement d'une ligne === |
Les enregistrements sont traités successivement.\\ | Les enregistrements sont traités successivement.\\ | ||
Ligne 30: | Ligne 30: | ||
^ ^ ^ | ^ ^ ^ | ||
|$0|Valeur de l'enregistrement courant| | |$0|Valeur de l'enregistrement courant| | ||
- | |FNR |Nombre d'enregistrements du fichier| | + | |NF |Nombre de champs de l'enregistrement courant| |
|$1 $2 ... $NF|$1 : champ n°1\\ $2 champ n°2\\ $NF : valeur du dernier champ| | |$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.)| | |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| | |FNR|Indice de l'enregistrement courant relatif au fichier en cours de traitement| | ||
|FILENAME |Nom du fichier en cours de traitement| | |FILENAME |Nom du fichier en cours de traitement| | ||
+ | |||
+ | |||
===== Opérateurs de tests ===== | ===== Opérateurs de tests ===== | ||
Ligne 40: | Ligne 42: | ||
^Opérateurs ^Significations ^ | ^Opérateurs ^Significations ^ | ||
- | |**<nowiki>==</nowiki>** |égale à | | + | |**<nowiki>==</nowiki>** |égale à (binaire) | |
- | |**<nowiki>!=</nowiki>** |différent de | | + | |**<nowiki>!=</nowiki>** |différent de (binaire)| |
- | |**<nowiki><=</nowiki>** |inférieur ou égale à | | + | |**<nowiki><=</nowiki>** |inférieur ou égale à (binaire) | |
- | |**<nowiki>>=</nowiki>** |supérieur ou égale à | | + | |**<nowiki>>=</nowiki>** |supérieur ou égale à (binaire) | |
- | |**<nowiki><</nowiki>** |inférieur à | | + | |**<nowiki><</nowiki>** |inférieur à (binaire)| |
- | |**<nowiki>></nowiki>** |supérieur à | | + | |**<nowiki>></nowiki>** |supérieur à (binaire)| |
- | |**<nowiki>~</nowiki>** |correspondance avec ER | | + | |**<nowiki>~</nowiki>** |correspondance avec ER (binaire)| |
- | |**<nowiki>!~</nowiki>** |non-correspondance avec ER | | + | |**<nowiki>!~</nowiki>** |non-correspondance avec ER (binaire)| |
|**<nowiki>!</nowiki>** |négation | | |**<nowiki>!</nowiki>** |négation | | ||
|**<nowiki>&&</nowiki>** |ET logique | | |**<nowiki>&&</nowiki>** |ET logique | | ||
|**<nowiki>||</nowiki>** |OU logique | | |**<nowiki>||</nowiki>** |OU logique | | ||
|**<nowiki>(expression)**</nowiki> |regroupement | | |**<nowiki>(expression)**</nowiki> |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 ^ | ||
+ | |<nowiki>+</nowiki> | addition | | ||
+ | |<nowiki>-</nowiki> | soustraction | | ||
+ | |<nowiki>*</nowiki> | multiplication | | ||
+ | |<nowiki>/</nowiki> | division | | ||
+ | |<nowiki>%</nowiki> | modulo | | ||
+ | |<nowiki>^</nowiki> | exponentiation | | ||
+ | |<nowiki>++</nowiki> (unitaire) | incrémentation | | ||
+ | |<nowiki>- -</nowiki> (unitaire) | décrémentation | | ||
+ | |<nowiki>+=</nowiki> | x += y équivaut à x = x + y | | ||
+ | |<nowiki>- =</nowiki> |x-=y équivaut à x = x - y| | ||
+ | |<nowiki>*=</nowiki> |<nowiki>x*=y équivaut à x = x * y</nowiki> | | ||
+ | |<nowiki>/=</nowiki> |x/=y équivaut à x = x / y | | ||
+ | |<nowiki>%=</nowiki> |x%=y équivaut à x = x % y | | ||
+ | |<nowiki>^=</nowiki> |<nowiki>x^=y équivaut à x = x ^ y</nowiki> | | ||
+ | |||
+ | |||
+ | =====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 <nowiki>[-]d.ddddddE[+/-]dd</nowiki> | Pour n=83,5\\ ("%e", $n) | '8.350000e+01' | | ||
+ | |%f | Nombre réel sous la forme <nowiki>[-]ddd.dddddd.</nowiki> | 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. | | ||