====== 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. |