awk bien determinier

Université d’Orléans UNIX La programmation AVVK AbdelAli. Ed-Dball@lifo. univ-orleans. fr @ A. ED-DBALI awk – principe de fonctionnement Forme générale d’un programme awk : Fichier en entrée Programme awk BEGIN {action début} Lignel sélectionl {actionl} sélectionn {actionn} Lignem END (action fin} Ligne2 or 15 Sni* to View Exécutée avant le début de lecture du fichier (sélection — – BEGIN) UNIX : La programmation AWK 4 Ligne de commande awk awk [-F ifs] [-f prog_file]… -v var=val]… [argument]… avvk [-F ifs] [-v var=val]… [‘prog_textl] [argument]… • -F ifs : Définit ifs comme le séparateur de champs en entrée nput field separator). ifs peut être une expression régulière (par défaut espace) • Le programme peut être stocké dans un fichier (prog_file) ou écrit dans la ligne de commande entre apostrophes (prog_text) • -v var=val : affecte val à var avant le début du programme (avant même la partie BEGIN) • argument – Fichier(s) entrée.

Si pas de fichier ou le signe c’est l’entrée standard qui est considérée – var=val : comme -v var=val sauf que : • si avant le nom du fichier en entrée, var prend effet après BEGIN • si après le nom du fichier en entrée, var prend effet avant END o ED-DBALI Script awk indépendant Commencer le programme awk ar la chaîne #! hemin absolu de awk – PAGF 15 ligne contenant le mot exemple • /[a-z][a-z]*$/ : ligne se terminant par une suite de lettres minuscules • $n — /expression/ (ou $n /expression/) – Sélection vérifiée si le champ n vérifie (ou ne vérifie pas) l’expression – Exemple • $2 – : le champ 2 commence par un chiffre • SI — : le champ 1 commence par un chiffre et se termine par une lettre minuscule 7 A.

ED-DBALI Syntaxe des sélections Relation • Opérateurs de relation : • Exemples : $1 « chaîne » vraie si le premier champ est « chaîne » raie si le nombre de champs de la ligne courante est * 5 – 20 vraie si le dernier champ est > à 20 (ne pas confondre avec : NF > 20 nombre de champs > à 20) • Relation entre expressions arithmétiques : – ($1+$2)/2 vraie si la moyenne des deux premiers champs est 10 15 la 30ème Expressions régulières Les caractères suivants ont une signification particulière pour définir une expression régulière : Caractère Interprétation caractère quelconque début de définition d’un ensemble début de définition du complément d’un ensemble fin de définition d’un ensemble ou de son complément arque d’intervalle dans un ensemble en début d’expression, définit le début de la ligne en fin d’expression, définit la fin de la ligne début de définition d’une sous-expression (accessible en suite par 1, fin de définition dune sous-expression 10 @ A. ED.

DBALI 5 : O ou plusieurs lettres minuscules /aa*/ : au moins un a /. */ : n’importe quelle chaîne de caractères (même vide) : ligne qui ne contient que des chiffres /(fermer ouvrir) (fenetrel porte)/ : fermer ou ouvrir suivi de fenetre ou porte • (TA)+C : reconnaît TAC, TATAC, TATATAC, etc. reconnait un nombre réel seul dans une ligne 12 A ED-DBALI Expressions manipulées dans les actions Constantes : • Les chaînes : – Chaîne = constante entourées de ‘ – Caractères spéciaux : Xt (tabulation), un (new line), Na (signal sonore), Nb (retour arrière), (carriage return), ccc (caractere représenté par son code octal (c chiffre octal)), • Les nombres : 1, -2, 1,5, o. 5e-1, • Les valeurs logiques : O faux, vrai Variables : • Variables utilisateur – Suite de lettres, de chiffr tère qui ne entrée séparateur de champs en sortie séparateur d’enregistrements format de sortie pour les nombres longueur de la chaîne reconnue par la fonction « match » ébut de la chaîne reconnue par la fonction « match’ tableau des variables d’environnement du Shell 14 Opérateurs arithmétiques, logiques et d’affectation Opération Affectation Opérateurs Exemple Signification Conditionnelle 6 5 actions sont inspirées du langage C Les actions sont délimitées par ou fin de ligne ou ‘Y print [liste_expr] • liste_expr : suite d’expressions séparées par des virgules • Affiche les expressions en les séparant par OFS (défaut: espace) et passe à la ligne • Si liste expr absent, afficher toute la ligne – print NR $l, $NF 1 :Premier Dernier (ligne 1: :M0i 2053 (ligne 2: – awk-v OFS= »: » ‘{pant NR $1, $NF}’ fiCh 1-Premier:Dernier 2-M0i:2053 17 Les actions awk – printf printf(format, liste_expr) comme en langage C • Ecrit, sur la sortie standard, la liste d’expressions selon format • format : chaîne avec des ordres de format d’affichage • (entier), (entier sur 6 positions), (chaîne), hl Os (chaîne sur 10 positions justifiée à droite), Os (idem justifiée à gauche), (réel), %. 2f réel avec 2 chiffres après la virgule), %6. 3f (réel avec nt et 3 chiffres après PAGF 7 5 formaté • Exemple : -x = %x », 45. 457, 11 , 111, 111) Met dans X la chaine :  » 45. 46 111 FF ff’ 19 @ ED-DBALI Les actions awk – Iength Iength[(chaîne)] • Renvoie la longueur de chaîne (si chaîne absente, $0 pris par défaut) • Exemple – $ echo « 123456 89 » | > awk print Iength, Iength($l) Y longueur de la ligne : 9 longueur du 1er champ 123456 : 6 • Attention : – Iength(15 * 35) vaut 3 . alcul de 15 * 35 = 525 conversion en chaîne « 525 » 20 Les actions awk – index 5 • Remplacer la première plus longue sous-chaîne correspondant à ER dans la chaine cible par la chaine remplacer (cible doit être une variable) • Si Clble absent, SO est pris par défaut ?? Si remplacer contient le caractère &, ce caractère est remplacé par la sous-chaîne trouvée – proie, toujours » sub(/oi/, « e », Ch) Ch devient « me, proie, toujours » awk ‘{sub(/[Dd]urand/, « & et sa femme »); print}’ Remplace, dans toutes les lignes, la première occurrence ‘Durand’ (ou ‘durand’) par ‘Durand et sa femme’ (ou ‘durand et sa femme’) • gsubs réalise la même opération que sub- La différence est que le remplacement est global sur toute la chaîne cible 23 Les actions awk – substr substr(chaîne, début [, long]) • Renvoie la sous-chaîne de chaîne de longueur long et qui commence à la position début ?? Si long absent, tout le suffixe est renvoyé – 4, 2) — « rg » – Bourges’ , 4, 8) « le Bourg » – Bourges », 7) « Bourges » 24 Fonction Valeur cos(x) sin(x) atan2(y,x) sqrt(x) log(x) exp(x) int(x) rand() srand(x) cosinus de x (x en radians) sinus de x (x en radians) arc-tangente de y/x renvoyée dans l’intervalle -rt et racine carrée de x logarithme népérien de x exponentielle de x partie entière de x nombre r aléatoire, 1 x est le point de départ dans la génération aléatoire rand(). srand() fait débuter le générateur selon l’heure 26 Les actions awk – structures de contrôle La plupart des structures t la même