Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort...
Transcript of Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort...
# 1
Les filtres
Auteur : Dominique Bouillet
Frédérique Silber-Chaussumier, mastère IPISONovembre, 2009
Les filtres
# 2
Plan
1 Définition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .32 Deux types de filtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Filtres simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Filtres programmables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 2/40
Les filtres
# 3
1 Définition
¥ Un filtre est un programme qui réalise¨ un traitement sur un flot de données en entrée¨ pour fournir un flot de données en sortie
Entrée ---> TRAITEMENT ---> Sortie
¨ Entrée : fichiers, stdin, sortie d’un tube, redirection, etc¨ Sortie : fichiers, stdout, entrée d’un tube, redirection, etc
¥ Intérêt¨ Développement aisé d’outils simples¨ Utilisation combinée avec des tubes −→ fonction complexe
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 3/40
Les filtres
# 4
2 Deux types de filtres
¥ Filtres simples : un traitement élémentaire + paramétrage par options¥ Exemple : sort = tri
¨ Options : tri numérique, lexicographique, normal, inverse, distinction minusculeset majuscules, etc
¥ Filtres dits "programmables" : actions données dans un pseudo-langage¥ Principaux filtres programmables
¨ sed éditeur de flots¨ awk traitement de fichiers¨ lex analyseur lexical (automates)¨ yacc générateur de traducteur
¥ Mais, une commande n’est pas toujours un filtre¥ Certaines sont utilisables seulement
¨ en entrée : who | wc¨ en sortie : sort fich | lpr¨ ni l’un ni l’autre : cd rep
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 4/40
Les filtres
# 5
3 Filtres simples
3.1 Filtres simples (1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.2 Filtres simples (2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73.3 Tri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83.4 Filtres utilisant les expressions régulières . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 5/40
Les filtres 3 Filtres simples
# 6
3.1 Filtres simples (1)¥ Visualisation
¨ affichage concaténé : cat¨ affichage formatté : pr¨ affichage début : head, affichage fin : tail¨ affichage octal : od
¥ Sauvegardes¨ archivage : tar, cpio¨ copie physique : dd
¥ Divers¨ comptage : wc (options -w (mots), -l (lignes), -c (caractères))¨ compression/décompression : compress/uncompress (fichier initial ⇔ fichier
suffixé .Z)¨ 1 entrée ⇒ 2 sorties (T) : tee : commande1 | tee fich | commande2
Exemple : who | tee qui | wc -l¨ paste fusion de lignes
Exemple affichage 4 colonnes : ls | paste - - - -
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 6/40
Les filtres 3 Filtres simples
# 7
3.2 Filtres simples (2)¥ Sélection : cut
¨ De caractères : cut -cliste [fichiers]cut -c80 monfic + 80 caractères
¨ De champs : cut [-dc] -fliste [fichiers] (séparateur : tabulation ou “c”)who | cut -d" " -f1 nom seul
¥ Traduction caractère : tr¨ Traduction min/MAJ : tr ’a-z’ ’A-Z’ <monfic¨ Options : -d (suppression), -c (complément), -s (un seul exemplaire en sortie)¨ Exemple : traduction non lettre → + unique
tr -cs [a-zA-Z] + <monfic
¥ Découpage : splitsplit -100 f1 découpage par 100 lignes
¥ Suppression lignes doubles : uniq¨ Options : -c (nombre d’occurrences), -n (n champs ignorés), +n (n caractères
ignorés)Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 7/40
Les filtres 3 Filtres simples
# 8
3.3 Trisort [-options] [+pos1] [-pos2]... [f1...]
¥ Exemple : who | sort¥ Principales options
¨ -tsep séparateur de champs = sep¨ -d tri alphabétique (lettres, chiffres), -n tri numérique¨ -u un seul exemplaire identique en sortie¨ -k, –key=POS1[,POS2] définir les clés de tri¨ +pos1 position de début de tri, -pos2 position de fin de tri (posi de la forme : n
ou n.m avec n = nombre de champs et m = nombre de caractères.)Exemple:ls -s | sort -n taillesort -t: -n +2 -3 /etc/passwd num UID
¥ Tri multi-critères de types différentssort -t: +3n -4 +0r -1 /etc/passwd
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 8/40
Les filtres 3 Filtres simples
# 9
3.4 Filtres utilisant les expressions régulières
3.4.1 Expressions régulières . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103.4.2 Expressions régulières : autres caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.4.3 Filtres utilisant les expressions régulières . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.4.4 grep et expr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 9/40
3 Filtres simples 3.4 Filtres utilisant les expressions régulières
# 10
3.4.1 Expressions régulières¥ La plupart des filtres utilisent les expressions régulières, pour définir des critères de
sélection¥ Expression régulière : spécification d’une chaîne de caractères à l’aide de caractères
spéciaux. un caractère quelconquec le caractère c\c annulation du sens spécial de c[...] un caractère de l’ensemble[^...] un caractère hors de l’ensemble
¥ Ensemble¨ une liste de caractères ([aechrw])¨ un intervalle ([0-9])¨ une combinaison des deux ([aeiouy0-9])[^A-Z] un caractère différent d’une majuscule[]0-9^[-] un chiffre, [, ], ^ ou -
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 10/40
3 Filtres simples 3.4 Filtres utilisant les expressions régulières
# 11
3.4.2 Expressions régulières : autres caractèresc* k répétitions de c ( k > = 0 )c\{n\} n répétitions du caractère cc\{n,\} au moins n répétitions de cc\{n,p\} entre n et p répétitions de c^ début de ligne$ fin de ligne\<c caractère c en début de motc\> caractère c en fin de mot\(...\) sous-expression "repérée"\k kième sous-expression repérée
¥ Exemples^$ ligne vide
^\(.*\)\1$ ligne constituée de 2 occurrencesd’une même chaîne de caractères
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 11/40
3 Filtres simples 3.4 Filtres utilisant les expressions régulières
# 12
¥ Autres (non gérés par toutes les commandes)(exp)* k répétitions de exp(exp)+ k répétitions de exp ( k > = 1 )(exp)? 0 ou 1 répétition de expex1|ex2 OU: expression ex1 ou ex2
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 12/40
3 Filtres simples 3.4 Filtres utilisant les expressions régulières
# 13
3.4.3 Filtres utilisant les expressions régulières
¥ Les filtres programmables : awk, lex...¥ Les éditeurs : ed, vi, sed...¥ Diverses commandes :
¨ more +/exp_reg affichage à partir de expr_regEx: more +/vt100 /etc/termcap
¨ nl -bpexp_reg numérotation des seules lignes contenant exp_regEx: nl -bpvt100 /etc/termcap
¨ csplit f1 arg1... éclatement du fichier f1 : xx00 (début à arg1 exclu), xx01 (dearg1 à arg2 exclu), ..., xx0n (de argn à la fin)I Chaque argi de la forme :
/exp_reg/ création d’un fichier%exp_reg% pas de création de fichier-n numéro de ligne
Ex: csplit fich /abc/ /dce/ %xyz%
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 13/40
3 Filtres simples 3.4 Filtres utilisant les expressions régulières
# 14
3.4.4 grep et expr
¥ grep recherche d’occurrences grep [-options] expr_reg [fichiers...]Ex: grep printf *.c
¨ Principales options :-v négation-c nombre de lignes sélectionnées-i pas de distinction min-MAJ-l noms de fichiers seulement-n lignes avec leur numéro
Ex: ls -l | grep -v ’^d’grep -l regular /usr/man/man1/*
¥ egrep variante de grep avec le OU logique + quelques ajoutsEx: egrep ’(t|m)oi’ fichier
¥ fgrep autre variante (sans exp_reg)
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 14/40
3 Filtres simples 3.4 Filtres utilisant les expressions régulières
# 15
¥ nb caractères de er2 dans er1 : expr er1 : er2Ex: a=abcdefexpr $a : ’.*c’ résultat : 3expr $a : ’c’ résultat 0 (c non au début)expr $a : ’.*’ résultat 6 (longueur)expr $a : ’.\(.\)’ résultat b (2ème caractère)
(les espaces sont importants)
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 15/40
Les filtres
# 16
4 Filtres programmables
4.1 Le filtre sed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174.2 Le filtre awk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 16/40
Les filtres 4 Filtres programmables
# 17
4.1 Le filtre sed
4.1.1 Le filtre sed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184.1.2 Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194.1.3 Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204.1.4 Commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214.1.5 Exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 17/40
4 Filtres programmables 4.1 Le filtre sed
# 18
4.1.1 Le filtre sed
¥ sed est un outil dérivé de l’éditeur ed¥ sed = stream editor c-à-d : éditeur "de flots"¥ Principe de sed
¨ lecture ligne à ligne de l’entrée¨ exécution de commandes d’édition¨ écriture du résultat sur la sortie standard
¥ Principales caractéristiques¨ rapidité¨ syntaxe d’ed (expressions régulières)¨ traitement d’entrées très longues¨ utilisable avec des tubes¨ travail sur plusieurs fichiers
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 18/40
4 Filtres programmables 4.1 Le filtre sed
# 19
4.1.2 Syntaxe
sed [-n] [-e cmde] [-f f_cmde] [fich1 ...]
¥ Commandes passées soit :¨ dans l’appel de la commande (cmde)¨ soit dans un fichier (f_cmde)
¥ Fichiers d’entrée fich1... non modifiés par sed¥ L’option -n supprime l’écriture automatique en sortie des informations lues⇒ il faut alors demander explicitement à sed d’écrire les informations désirées en sortie¥ Une commande simple passée directement doit l’être entre quotes si on veut éviter
l’interprétation par le shell des caractères spéciaux¥ Création du fichier f1bis à partir de f1 en remplaçant partout UN par DEUX
sed ’s/UN/DEUX/g’ f1 >f1bis
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 19/40
4 Filtres programmables 4.1 Le filtre sed
# 20
4.1.3 Format
¥ Une commande sed a le format suivant :[adr1 [, adr2 ] ] fonction [ arguments ]
¥ Adressage analogue à celui d’ed¨ un numéro de ligne 48¨ un ensemble de lignes 45,72¨ repérage par une expression régulière /exp/
¥ Si aucune adresse⇒ toutes les lignes sélectionnées¨ alors qu’avec ed, seulement la ligne courante
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 20/40
4 Filtres programmables 4.1 Le filtre sed
# 21
4.1.4 Commandes¥ Principales commandes de sed
a\ ajout de textec\ remplacement de lignesd suppression de lignesi\ insertion de textel listagep listage des seuls caractères imprimablesq fin (sortie de sed)r fic lecture du fichier fics/a/b/ remplacement de la chaîne a par la chaîne bw fic écriture dans le fichier ficy/a/b/ remplacement de chaque caractère de la chaîne a par
son homologue de la chaîne b (a et b de même longueur)= affichage du numéro de la ligne courante
!cmde négation de la fonction cmde : la commande cmden’est exécutée que si la ligne n’est pas sélectionnée
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 21/40
4 Filtres programmables 4.1 Le filtre sed
# 22
4.1.5 Exemples¥ Liste des entrées du répertoire courant
ls | sed ’/^liste$/d’ >liste¥ Afficher les 3 premières lignes d’un fichier
sed 3q fich (quitter après 3)sed -n ’1,3p’ fich (afficher 1 à 3)sed ’4,$d’ fich (détruire de 4 à la fin)
¥ Afficher les portions d’un fichier à partir d’une ligne terminée par Z à unecommençant par Ased -n ’/Z$/,/^A/p’ fich
¥ Ajouter le caractère ; en début de chaque lignesed ’s/^/ ;/’ fich
¥ Idem sauf lignes videssed ’/./s/^/ ;/’ fich (au moins un caractère)
sed ’/^$/ !s/^/ ;/’ fich (négation de la substitution sur les lignes vides)
¥ On peut enchaîner une commande UNIX en sortie de sedTélécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 22/40
Les filtres 4 Filtres programmables
# 23
4.2 Le filtre awk
4.2.1 Le filtre awk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244.2.2 Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254.2.3 Enregistrement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264.2.4 Critères de sélection (patterns) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274.2.5 Opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284.2.6 Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294.2.7 Fonctions de sortie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304.2.8 Sorties redirigées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314.2.9 Fonctions internes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324.2.10 Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .334.2.11 Tableaux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .344.2.12 Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .354.2.13 Exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364.2.14 Exemples (suite) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384.2.15 nawk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 23/40
4 Filtres programmables 4.2 Le filtre awk
# 24
4.2.1 Le filtre awk
¥ Principales possibilités offertes par awk¨ manipulation de champs et de variables¨ opérations arithmétiques et logiques¨ actions conditionnelles¨ impression de résultats¨ paramètrage des formats d’entrée et de sortie
¥ Principe de fonctionnement¨ lecture d’un enregistrement de l’entrée¨ recherche des critères de sélection¨ exécution d’une action pour chaque critère satisfait¨ passage à l’enregistrement suivant
¥ Remarque : awk = initiales de Aho, Weinberger, Kernighan
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 24/40
4 Filtres programmables 4.2 Le filtre awk
# 25
4.2.2 Format
¥ Critères de sélection et actions indiqués dans un "programme"¥ Celui-ci est donné
¨ soit dans la ligne de commande lors de l’appel de awk (entre quotes)¨ soit dans un fichier
¥ Chaque ligne de programme a le format suivantcritère { action }
¥ action exécutée pour tous les enregistrements satisfaisant le critère¥ Deux cas particuliers
¨ si le critère est omis, l’action s’applique à tous les enregistrements¨ si l’action est omise, l’enregistrement entier est copié sur la sortie
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 25/40
4 Filtres programmables 4.2 Le filtre awk
# 26
4.2.3 Enregistrement
¥ Le flot d’entrée est divisé en enregistrements¨ Variable RS = séparateur d’enregistrements¨ Variable NR = numéro d’enregistrement courant¨ Variable $0 = enregistrement complet
¥ Par défaut, un enregistrement = une ligne¥ Chaque enregistrement est divisé en champs
¨ Variable FS = Séparateur de champs¨ Variable NF = nombre de champs¨ Variable $1 = premier champ¨ Variable $2 = deuxième champ¨ ...¨ Variable $NF = dernier champ
¥ Par défaut, FS = espace ou Tabulation¥ Si RS est "vide", les lignes vides servent de séparateurs d’enregistrements et les
séparateurs de champs sont espace, Tabulation et NewLine¥ Variable FILENAME = nom du fichier traitéTélécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 26/40
4 Filtres programmables 4.2 Le filtre awk
# 27
4.2.4 Critères de sélection (patterns)
¥ Un critère de sélection =¨ une expression régulière¨ une relation d’ordre entre deux expressions¨ toute combinaison logique d’expressions régulières et de relations d’ordre
I 2 critères séparés par une virguleI BEGIN (action avant la lecture du premier enregistrement)I END (action après la lecture du dernier enregistrement)
¨ Si ces 2 critères sont utilisés, ils doivent l’être en premier pour BEGIN et endernier pour END
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 27/40
4 Filtres programmables 4.2 Le filtre awk
# 28
4.2.5 Opérateurs
¥ Opérateurs disponibles : ceux du langage C¥ opérateurs logiques : ! (NON), || (OU) et && (ET)¥ opérateurs arithmétiques : + (addition), - (soustraction), * (multiplication), /
(division), et % (modulo)¥ mais aussi : ++ (incrémentation), – (décrémentation), +=, -=, *=, /=, et
%=(opération et affectation)¥ opérateurs relationnels : == (égalité), != (différence), > (supérieur), >= (supérieur ou
égal), < (inférieur) et <= (inférieur ou égal)¥ autres : espace (concaténation), ~ (appartenance) et !~ (non appartenance)
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 28/40
4 Filtres programmables 4.2 Le filtre awk
# 29
4.2.6 Actions
¥ Action = une séquence d’opérations¥ Une opération = l’un des éléments suivants
¨ une structure conditionnelle (syntaxe C)if (condition) opération[else opération]
while (condition) opérationfor (expression;condition;expression) opération
¨ un bloc d’opérations : opérations...¨ l’affectation de variables : var=expression¨ une fonction de sortie : print ou printf¨ une fonction de traitement conditionnel : next (enregistrement suivant), exit
(sortie), break (sortie de boucle), continue (itération suivante)¨ une fonction interne de manipulation de chaînes de caractères ou d’expressions
mathématiques.
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 29/40
4 Filtres programmables 4.2 Le filtre awk
# 30
4.2.7 Fonctions de sortie
print [liste d’expressions]printf format [,liste d’expressions]
¥ Si la liste d’expressions est vide, la fonction s’applique à l’enregistrement entier¥ Par défaut, la sortie se fait sur la sortie standard (stdout). On peut la rediriger sur
une autre sortie avec >fich et >>fich¥ Expressions séparées par espace –> elles sont concaténées en sortie¥ Expressions séparées par une virgule –> elles sont séparées en sortie par le
séparateur de champs de sortie : Variable OFS, par défaut espace.¥ Chaque sortie est terminée par le séparateur d’enregistrements de sortie : variable
ORS, par défaut NewLine.print "Bon" "jour" --> Bonjourprint "Bon","jour" --> Bon jour
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 30/40
4 Filtres programmables 4.2 Le filtre awk
# 31
4.2.8 Sorties redirigées
¥ Print et printf permettent d’écrire sur 10 fichiers au maximumprint [liste] > "nom_de_fichier"print [liste] >> "nom_de_fichier"
¥ >> : contenu du fichier initial conservé¥ > : fichier initial détruit s’il existait¥ De même, on peut enchaîner la sortie sur un tube
print [liste] | "commande UNIX"
¥ Formats de printf : ceux de la fonction printf du langage C¥ Format de print : celui défini par la variable OFMT, par défaut %.6g
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 31/40
4 Filtres programmables 4.2 Le filtre awk
# 32
4.2.9 Fonctions internes
length longueur de l’enregistrementlength(s) longueur de la chaîne sexp(x) exponentielle de l’expression xlog(x) logarithme de l’expression xsqrt(x) racine carrée de l’expression xint(x) partie entière de l’expression xindex(s1,s2) position de la chaîne s2 dans la chaîne s1
(0 si absente)substr(s,m,n) sous-chaîne de s composée de n
caractères à partir de la position msprintf(f,e1, e2,...) chaîne obtenue en formattant les
expressions e1, e2... selon le format findiqué
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 32/40
4 Filtres programmables 4.2 Le filtre awk
# 33
4.2.10 Variables
¥ Variable numérique, alphanumérique, de type tableau ou un champ.¥ Le type dépend de l’utilisation :
¨ pas de déclaration¨ initialisation automatique (0 ou chaîne nulle)
¥ Utilisation d’une variable¨ pas de caractère $ (comme en shell)¨ seuls les champs sont notés $i{print NF } affichage du nombre de champs{print $NF } affichage du dernier champ
¥ Constantes entre guillemets ("constante")
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 33/40
4 Filtres programmables 4.2 Le filtre awk
# 34
4.2.11 Tableaux
¥ Un tableau tablo[i] peut être indicé :¨ soit par un entier¨ soit par une chaîne de caractères
¥ Cette dernière facilité permet de gérer des tableaux associatifs¥ Exemple
stock["fruits"]=stock["pommes"]+stock["poires"]¥ Une variante de la structure for permet de manipuler les tableaux
for (variable in tableau)opération
¥ Exemplefor ( i in stock)
{print i,stock[i]}
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 34/40
4 Filtres programmables 4.2 Le filtre awk
# 35
4.2.12 Syntaxe
awk [-f f_pg] [-Fc] [var1=x1 ...] [fic ...]awk [-Fc] [’prog’] [var1=x1 ...] [fic ...]
f_pg = nom du fichier programmec = caractère séparateur de champs (FS)prog = programme donné directementx1 = valeur affectée à la variable var1...fic... = liste des fichiers à traiter
¥ Remarques¨ Initialisation des variables avant lecture du premier enregistrement¨ Le caractère - représente l’entrée standard
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 35/40
4 Filtres programmables 4.2 Le filtre awk
# 36
4.2.13 Exemples
¥ Somme et moyenne des premiers champs{ som+=$1 }
END { print "Somme :",som," ,Moyenne :",som/NR}
¥ Ajouter numéro de ligne et nombre de champs{print NR, NF, $0}
¥ Éclater un fichier en plusieurs{print $1>"fic1" ; print $2>"fic2"}
¥ Afficher un fichier en inversant les champsBEGIN {ORS=" "}
{for (i=NF;i>0;--i) print $i;printf "\n"}
¥ Afficher toutes les lignes commençant par une majuscule
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 36/40
4 Filtres programmables 4.2 Le filtre awk
# 37
BEGIN { FS=":"} (séparateur :)/^[A-Z]/ {print}
¥ Remplacer le champ 1 par son logarithm{$1=log($1) ;print}
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 37/40
4 Filtres programmables 4.2 Le filtre awk
# 38
4.2.14 Exemples (suite)
¥ Afficher les lignes ayant les champs 1 et 2 égaux$1 == $2 {print}
¥ Afficher les lignes dont le champ 1 est différent du champ 1 précédent
$1 != prev {print ; prev=$1}¥ Afficher les lignes 20 à 30
NR==20,NR==30 {print}¥ Nom et heure de connexion des utilisateurs who | awk ’ {print $1,$5}’¥ Occurrences de pomme, poire, raisin
/pomme/ {t["pomme"]++}/poire/ {t["poire"]++}/raisin/ {t["raisin"]++}END {for (i in t)
print "Fruit : ",i," Nombre :",t[i]}
¨ Mieux : {t[$1]++}Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 38/40
4 Filtres programmables 4.2 Le filtre awk
# 39
4.2.15 nawk
¥ nawk nouvelle version de awk avec en plus¨ "expressions régulières dynamiques"¨ nouvelles fonctions internes¨ fonctions utilisateur¨ Nouvelles variables
I ARGC nombre d’argumentsI ARGV tableau des argumentsI FNR NR pour le fichier courant ...
¨ Nouvelles fonctions mathématiques : cos, sin, atan2, rand...¨ Nouvelles fonctions :
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 39/40
4 Filtres programmables 4.2 Le filtre awk
# 40
sub(x,r,y) substitution de x par r dans ygsub(...) idem mais globalmatch(s,r) position de r dans ssplit(s,a,f) éclate s dans le tableau a[1]...
(f séparateur)getline [x] affecte $0 [ou x]system(cmd) exécute la commande cmd
¨ Fonctions utilisateur :function nom(arg,...) {actions}
Télécom SudParis — Dominique Bouillet — Novembre, 2009 — Frédérique Silber-Chaussumier, mastère IPISO 40/40