Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort...

40
Les filtres Auteur : Dominique Bouillet Frédérique Silber-Chaussumier, mastère IPISO Novembre, 2009

Transcript of Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort...

Page 1: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

# 1

Les filtres

Auteur : Dominique Bouillet

Frédérique Silber-Chaussumier, mastère IPISONovembre, 2009

Page 2: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,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

Page 3: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 4: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 5: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 6: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 7: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 8: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 9: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 10: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 11: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 12: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 13: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 14: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 15: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 16: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 17: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 18: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 19: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 20: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 21: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 22: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 23: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 24: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 25: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 26: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 27: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 28: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 29: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 30: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 31: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 32: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 33: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 34: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 35: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 36: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 37: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 38: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 39: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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

Page 40: Lesfiltres - Télécom SudParis · 2009. 11. 19. · ¥ Trimulti-critèresdetypesdifférents sort -t: +3n -4 +0r -1 /etc/passwd TélécomSudParis— DominiqueBouillet — Novembre,2009

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