32
1 GPA435 Systèmes GPA435 Systèmes d’exploitation et d’exploitation et programmation de programmation de système système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1) U n ive rs ité d u Q uébec É co le d e te c h n o lo g ie s u p érieu re D é partem e n t de génie de la p ro du ctio n a u to m a tisée

1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

Embed Size (px)

Citation preview

Page 1: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

1

GPA435 Systèmes GPA435 Systèmes d’exploitation et d’exploitation et programmation de programmation de systèmesystème

Copyright, 2000 © Tony Wong, Ph.D.

Chapitre 9Programmation nawk(1)

Université du Québec

École de technologie supérieureDépartem ent de génie de la production autom atisée

Page 2: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

2

Filtre programmable Filtre programmable nawk(1)nawk(1)• Les étapes nécessaires pour écrire un Les étapes nécessaires pour écrire un

programme programme nawk(1)nawk(1)::

• Comprendre le principe de traitement de Comprendre le principe de traitement de nawk(1)nawk(1) section 9 à 9.3 section 9 à 9.3

• Identifier les patrons légaux de nawk(1) Identifier les patrons légaux de nawk(1) section 9.4section 9.4

• Identifier les actions légales de nawk(1) Identifier les actions légales de nawk(1) section 9.5section 9.5

• Évidemment, faire les exercices de ce Évidemment, faire les exercices de ce chapitre!chapitre!

Système d’exploitation UNIX

Page 3: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

3

Essentiel des traitements (1)Essentiel des traitements (1)

Système d’exploitation UNIX

La provenance des données d’entrée:La provenance des données d’entrée: Fichiers spécifiés à la ligne de Fichiers spécifiés à la ligne de

commandecommande Via un tuyau ou la redirectionVia un tuyau ou la redirection

Lecture des données est réalisée Lecture des données est réalisée automatiquement par automatiquement par nawk(1)nawk(1)..

Séparation des lignes d’entrée en Séparation des lignes d’entrée en champs est réalisée par champs est réalisée par nawk(1)nawk(1):: FS FS caractères de séparateur de champ caractères de séparateur de champ NF NF nombre de champs obtenus nombre de champs obtenus

Page 4: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

4

Essentiel des traitements (2)Essentiel des traitements (2)

Système d’exploitation UNIX

Chaque ligne d’entrée est comparée à la séquence Chaque ligne d’entrée est comparée à la séquence « patron - action »:« patron - action »: S’il y a correspondance entre la ligne d’entrée et un S’il y a correspondance entre la ligne d’entrée et un

patron, l’action correspondante est exécutée.patron, l’action correspondante est exécutée. Le paradigme est piloté par données « data-driven ».Le paradigme est piloté par données « data-driven ».

La ligne d’entrée est comparée à tous les énoncées La ligne d’entrée est comparée à tous les énoncées « patron - action » du programme utilisateur.« patron - action » du programme utilisateur.

Page 5: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

5

Patrons (1)Patrons (1) Six types de patron:Six types de patron:

BEGINBEGINL’action associée est toujours exécutée L’action associée est toujours exécutée

avantavant le traitement des lignes d’entrée le traitement des lignes d’entrée ENDEND

L’action associée est toujours exécutée L’action associée est toujours exécutée à la à la finfin des traitements des lignes d’entrée des traitements des lignes d’entrée

exprexprUne expression arithémtique et/ou Une expression arithémtique et/ou

relationnellerelationnelleLa valeur non nulle (La valeur non nulle ( 0) du résultat de 0) du résultat de

l’évaluation de expr provoque l’exécution l’évaluation de expr provoque l’exécution de l’action associéede l’action associée

Système d’exploitation UNIX

Page 6: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

6

Patrons (2)Patrons (2) Six types de patron (suite):Six types de patron (suite):

/regex//regex/Une expression générique. La Une expression générique. La

correspondance entre regex et la ligne correspondance entre regex et la ligne d’entrée provoque l’exécution de l’action d’entrée provoque l’exécution de l’action associéeassociée

Le symbole ~ représente l’opérateur Le symbole ~ représente l’opérateur d’appariementd’appariement

$0 ~ /^[0-9].*$/$0 ~ /^[0-9].*$/ expr_compexpr_comp

Expression composée. Le patron est Expression composée. Le patron est composé plus d’un expr (/regex/) reliés par composé plus d’un expr (/regex/) reliés par des opérateurs logiquesdes opérateurs logiques

! Négation, || OU-logique, && ET-logique! Négation, || OU-logique, && ET-logique

Système d’exploitation UNIX

~ est ~ est équivalent à équivalent à = pour une = pour une expression expression ordinaireordinaire

Page 7: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

7

Patrons (3)Patrons (3)Six types de patron (suite):Six types de patron (suite):

expr_intervexpr_intervExpression exprimant un intervalleExpression exprimant un intervalleL’action associée est exécutée pour toutes L’action associée est exécutée pour toutes

les lignes à l’intérieur de l ’intervalleles lignes à l’intérieur de l ’intervalle$1 > 5, $1 < 100$1 > 5, $1 < 100

Système d’exploitation UNIX

Ce patron signifie: Ce patron signifie:

Les lignes d’entrée dont le champ 1 est plus grand que Les lignes d’entrée dont le champ 1 est plus grand que 5 et plus petit que 1005 et plus petit que 100..

L’action associée à ce patron sera exécutée pour les L’action associée à ce patron sera exécutée pour les lignes d’entrée satisfaisant cette contrainte.lignes d’entrée satisfaisant cette contrainte.

Page 8: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

8

ActionActionLes actions de Les actions de nawk(1)nawk(1) sont composées: sont composées:

Instructions légales (voir section 9-5)Instructions légales (voir section 9-5) Fonctions pré-définies (voir section 9-5)Fonctions pré-définies (voir section 9-5) Fonctions utilisateursFonctions utilisateurs

function nomFunc (liste-parametres) {function nomFunc (liste-parametres) {

déclarationsdéclarations

}}

Système d’exploitation UNIX

Liste-parametres sont des variables Liste-parametres sont des variables passées à la fonction. passées à la fonction. Elles sont Elles sont

locales à la fonctionlocales à la fonction..

Les variables utilisées dans une Les variables utilisées dans une fonction sont automatiquement des fonction sont automatiquement des

variables globalesvariables globales..

Une fonction peut Une fonction peut retourner un résultat retourner un résultat par l’instructionpar l’instruction

return resultatreturn resultat

Page 9: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

9

Programmation Programmation nawk(1)nawk(1)

Système d’exploitation UNIX

Comment écrire un programme Comment écrire un programme nawk(1)nawk(1) ? ? Déterminer le but du programmeDéterminer le but du programme Comprendre le format des données à traiterComprendre le format des données à traiter Établir l’algorithme de traitementÉtablir l’algorithme de traitement Quelles sont les variables et constantes à initialiser dans le Quelles sont les variables et constantes à initialiser dans le

programme ?programme ?Les initialiser dans l’action du patron BEGINLes initialiser dans l’action du patron BEGIN

Quelles sont les tâches à effectuer à la fin du programme ?Quelles sont les tâches à effectuer à la fin du programme ? Les réaliser dans l’action du patron ENDLes réaliser dans l’action du patron END

Page 10: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

10

Programmation Programmation nawk(1)nawk(1)

Système d’exploitation UNIX

Scinder l’algorithme en une séquence de « patron - action »Scinder l’algorithme en une séquence de « patron - action »Chaque énoncée « patron - action » doit réaliser une patrie de Chaque énoncée « patron - action » doit réaliser une patrie de

l’algorithmel’algorithme

N’oubliez pas, les lignes d’entrée sont comparées à toutes les énoncées N’oubliez pas, les lignes d’entrée sont comparées à toutes les énoncées « patron - action »« patron - action »

Établir les patrons à utiliser:Établir les patrons à utiliser:Doit-on utiliser des expressions relationnelles ?Doit-on utiliser des expressions relationnelles ?

Doit-on utiliser des expressions génériques ?Doit-on utiliser des expressions génériques ?

Doit-on utiliser des expressions composées ?Doit-on utiliser des expressions composées ?

Doit-on utiliser des expressions d’intervalle ?Doit-on utiliser des expressions d’intervalle ?

Page 11: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

11

Programmation Programmation nawk(1)nawk(1) Écrire les actions associées:Écrire les actions associées:

Vérifier s’il existe une fonction pré-définie pour accomplir la tâcheVérifier s’il existe une fonction pré-définie pour accomplir la tâche

Vérifier s’il est nécessaire de créer une fonction utilisateur pour Vérifier s’il est nécessaire de créer une fonction utilisateur pour simplifier la programmationsimplifier la programmation

Tester le programme Tester le programme nawk(1)nawk(1)::Utiliser un petit nombre de données pour tester le programmeUtiliser un petit nombre de données pour tester le programme

Tester le programme partie par partieTester le programme partie par partie

Tester le programme en intégrant toutes les parties ensemblesTester le programme en intégrant toutes les parties ensembles

Système d’exploitation UNIX

Page 12: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

12

Exemples (1)Exemples (1)Fréquence des mots dans un texteFréquence des mots dans un texte

Dans le domaine de l’analyse textuelle, la fréquence des mots est Dans le domaine de l’analyse textuelle, la fréquence des mots est un outil très utilisée dans l’authentification des documents.un outil très utilisée dans l’authentification des documents.

Les gens ont tendance à utiliser souvent les mêmes mots.Les gens ont tendance à utiliser souvent les mêmes mots.

Nous allons créer un petit programme capable de donner Nous allons créer un petit programme capable de donner la fréquence d’apparition des mots dans un textela fréquence d’apparition des mots dans un texteMots majuscules = Mots minusculesMots majuscules = Mots minuscules

Système d’exploitation UNIX

Page 13: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

13

Exemples (2)Exemples (2)

Système d’exploitation UNIX

D ébut

Isoler les m ots enenlevant laponctuation

Utiliser un tableauassociatif pour

com pter les m ots

Afficher lafréquence des

m otsrencontrés

F in

OrdinogrammeOrdinogramme

Un tableau Un tableau associatif est un associatif est un tableau dans lequel tableau dans lequel l’indice des l’indice des éléments est une éléments est une chaîne de chaîne de caractères.caractères.

Ex: tab["nom"] = Ex: tab["nom"] = "Tony""Tony"

Nous utiliserons une Nous utiliserons une expression générique et expression générique et la fonction la fonction gsub()gsub() pour pour accomplir cette tâcheaccomplir cette tâche

Nous utiliserons Nous utiliserons l’instruction l’instruction printprint pour pour réaliser l’affichageréaliser l’affichage

Page 14: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

14

Exemples (3)Exemples (3)

Système d’exploitation UNIX

Isolation des mots par Isolation des mots par gsub()gsub()revient revient à éliminer les caractères de à éliminer les caractères de ponctuation:ponctuation:gusb(/[.,:;!?(){}]/, "")gusb(/[.,:;!?(){}]/, "")

Substitution globale du Substitution globale du premier paramètre par premier paramètre par le deuxième paramètre le deuxième paramètre de la fonctionde la fonction

Premier paramètre: les Premier paramètre: les caractères entre caractères entre crochets. Donc, reliés crochets. Donc, reliés par un OU-logique par un OU-logique implicitimplicit

Deuxième Deuxième paramètre: vide. paramètre: vide.

Donc, substitution Donc, substitution par le vide = par le vide =

éliminationélimination

Note: Chaque mot d’une ligne Note: Chaque mot d’une ligne est automatiquement placé est automatiquement placé dans un champ par dans un champ par nawk(1)nawk(1)

Page 15: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

15

Exemples (4)Exemples (4)Confondre les mots majuscules et les Confondre les mots majuscules et les

mots minuscules:mots minuscules:cat texte.txt | tr 'a-z' 'A-Z' > lignes.tmpcat texte.txt | tr 'a-z' 'A-Z' > lignes.tmp

Cette conversion est réalisée en dehors Cette conversion est réalisée en dehors du programme du programme nawk(1)nawk(1)..

On utilise la commande UNIX tr(1) pour On utilise la commande UNIX tr(1) pour effectuer la conversion minuscule - effectuer la conversion minuscule - majuscule via un tuyau.majuscule via un tuyau.

Le texte majuscule est placé dans le Le texte majuscule est placé dans le fichier temporaire fichier temporaire lignes.tmplignes.tmp

Système d’exploitation UNIX

Page 16: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

16

Exemples (5)Exemples (5)Compter les mots revient à stocker les mots Compter les mots revient à stocker les mots

dans un tableau associatif. Les indices du dans un tableau associatif. Les indices du tableau sont les mots eux-mêmes et la valeur tableau sont les mots eux-mêmes et la valeur d’un élément du tableau est le nombre d’un élément du tableau est le nombre d’apparitions d’un mot:d’apparitions d’un mot:for (i=1; i<=NF; i++)for (i=1; i<=NF; i++)

compte[$i]++compte[$i]++

Système d’exploitation UNIX

NFNF est le nombre de est le nombre de champs de la ligne champs de la ligne

d’entrée. Dans d’entrée. Dans notre contexte, notre contexte, NFNF

est le nombre de est le nombre de mots de la ligne mots de la ligne

d’entréed’entrée

$i$i représente le contenu du i représente le contenu du iee champ. Dans notre contexte, il champ. Dans notre contexte, il s ’agit du is ’agit du iee mot de la ligne. mot de la ligne. CompteCompte est le tableau est le tableau associatif. Chaque élément de associatif. Chaque élément de ce tableau est un mot distinct.ce tableau est un mot distinct.

Page 17: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

17

Exemples (6)Exemples (6)

Système d’exploitation UNIX

A-t-on besoin d’initialiser les variables ou constantes A-t-on besoin d’initialiser les variables ou constantes pour ce programme ?pour ce programme ?Non. Donc pas de patron BEGIN ni son action associée.Non. Donc pas de patron BEGIN ni son action associée.

A-t-on besoin d’effectuer des tâches à la fin du A-t-on besoin d’effectuer des tâches à la fin du programme ?programme ?Oui. Il faut afficher le nombre d’apparitions des mots et le Oui. Il faut afficher le nombre d’apparitions des mots et le

nombre total des mots rencontrés. Cette tâche sera réalisée nombre total des mots rencontrés. Cette tâche sera réalisée dans l’action associée au patron END.dans l’action associée au patron END.

Page 18: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

18

Système d’exploitation UNIX#!/bin/sh#!/bin/sh# comptemot# comptemot# Programme utilisant nawk(1) pour compter le nombre d'apparitions# Programme utilisant nawk(1) pour compter le nombre d'apparitions# des mots dans un texte# des mots dans un texte

# D'abord convertir le texte en majuscule et le mettre dans un# D'abord convertir le texte en majuscule et le mettre dans un# fichier temproraire "lignes.tmp"# fichier temproraire "lignes.tmp"cat texte.txt | tr 'a-z' 'A-Z' > lignes.tmpcat texte.txt | tr 'a-z' 'A-Z' > lignes.tmp

nawk 'nawk '# A la fin du programme afficher le resultat en ordre decroissant# A la fin du programme afficher le resultat en ordre decroissant# numerique# numeriqueEND { for (mot in compte) {END { for (mot in compte) { print compte[mot], mot | "sort -rn" print compte[mot], mot | "sort -rn" total += compte[mot]total += compte[mot] }} print "Nombre total des mots: " totalprint "Nombre total des mots: " total }} { gsub(/[.,:;!?(){}]/,"") # elimine la ponctuation{ gsub(/[.,:;!?(){}]/,"") # elimine la ponctuation for (i=1; i<=NF; i++) # placer les mots trouves dans unfor (i=1; i<=NF; i++) # placer les mots trouves dans un compte[$i]++ # tableau associatifcompte[$i]++ # tableau associatif }}' lignes.tmp' lignes.tmp

Page 19: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

19

Exemples (7)Exemples (7)

Système d’exploitation UNIX

RésultatRésultatJe me tutoieJe me tutoieJe me tutoie depuis deja longtempsJe me tutoie depuis deja longtempsJe me serre, je me sorsJe me serre, je me sorsJe me berce, je me bordeJe me berce, je me bordeet je m'endorset je m'endors

Fatigue de moi je reve de toiFatigue de moi je reve de toiJe te majusculeJe te majusculeJe te point d'exclameJe te point d'exclameJe te vouvoieJe te vouvoie

Mais lorsque je nous trait d'unionMais lorsque je nous trait d'unionCa me reveilleCa me reveilleOr je me minusculeOr je me minusculeJe me rendorsJe me rendorsPointPoint

James CorcoranJames Corcoran

centi 10> comptemot | morecenti 10> comptemot | more14 JE14 JE9 ME9 ME3 TE3 TE2 TUTOIE2 TUTOIE2 POINT2 POINT2 DE2 DE1 VOUVOIE1 VOUVOIE1 TRAIT1 TRAIT1 TOI1 TOI1 SORS1 SORS1 SERRE1 SERRE1 REVEILLE1 REVEILLE1 REVE1 REVE: : :: : :1 BERCE1 BERCENombre total des mots: 60Nombre total des mots: 60

Page 20: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

20

Exemples (8)Exemples (8)

Système d’exploitation UNIX

Principe de fonctionnementPrincipe de fonctionnement

Le tableau associatif utilise les mots du texte Le tableau associatif utilise les mots du texte comme indice.comme indice.

Chaque mot distinct est un élément du Chaque mot distinct est un élément du tableau associatif.tableau associatif.

Le contenu du tableau associatif est le nombre Le contenu du tableau associatif est le nombre d ’apparitions des mots dans le texte.d ’apparitions des mots dans le texte.

14

"JE" "M E" "T U T O IE"

9 2 1 1

"JAM ES" "C O R C O R AN "

compte

indice

compte[indice]

Page 21: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

21

Exemples (9)Exemples (9)

Système d’exploitation UNIX

Extraire les informations d’un en-tête de courriel. Extraire les informations d’un en-tête de courriel. L’en-tête est placé au préalable dans un fichier temporaire.L’en-tête est placé au préalable dans un fichier temporaire.Le programme doit extraire:Le programme doit extraire:

L’adresse de la sourceL’adresse de la source

La date et l’heure de réceptionLa date et l’heure de réception

Le sujet du courrielLe sujet du courriel

La longueur du corps du courrielLa longueur du corps du courriel

Page 22: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

22

Exemples (10)Exemples (10)

Système d’exploitation UNIX

From [email protected] Fri Mar 17 15:51 EST 2000From [email protected] Fri Mar 17 15:51 EST 2000

X-UIDL: f8d17591aadd380945dc16c5f506b9f7X-UIDL: f8d17591aadd380945dc16c5f506b9f7

Received: from gpa.etsmtl.ca (tony [142.137.41.54])Received: from gpa.etsmtl.ca (tony [142.137.41.54])

by exa.gpa.etsmtl.ca (8.9.1a/8.9.1) with ESMTP id PAA04884by exa.gpa.etsmtl.ca (8.9.1a/8.9.1) with ESMTP id PAA04884

for <[email protected]>; Fri, 17 Mar 2000 15:51:43 -0500 (EST)for <[email protected]>; Fri, 17 Mar 2000 15:51:43 -0500 (EST)

Message-ID: <[email protected]>Message-ID: <[email protected]>

Date: Fri, 17 Mar 2000 15:57:28 -0500Date: Fri, 17 Mar 2000 15:57:28 -0500

From: Tony Wong <[email protected]>From: Tony Wong <[email protected]>

:: :: ::

MIME-Version: 1.0MIME-Version: 1.0

To: Tony Wong <[email protected]>To: Tony Wong <[email protected]>

Subject: TEST 1Subject: TEST 1

Content-Transfer-Encoding: 8bitContent-Transfer-Encoding: 8bit

Content-Transfer-Encoding: 8bitContent-Transfer-Encoding: 8bit

Content-Type: text/plain; charset=iso-8859-1Content-Type: text/plain; charset=iso-8859-1

Content-Length: 366Content-Length: 366

Status: UStatus: UCes informations sont à extraire Ces informations sont à extraire par notre programme.par notre programme.

Attention! Le programme Attention! Le programme nécessite l’en-tête pré-nécessite l’en-tête pré-enregistré dans un fichier.enregistré dans un fichier.

Les Date:, From:, subject: et Les Date:, From:, subject: et Content-Length: sont situés Content-Length: sont situés dans le premier champ ($1)dans le premier champ ($1)

Page 23: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

23

Système d’exploitation UNIXOrdinogrammeOrdinogramme

Ces étapes Ces étapes sont réalisées sont réalisées auto-auto-matiquement matiquement par par nawk(1)nawk(1)..

Début

$1 est "From :"?

$1 est "Date:"?

$1 est"Subject:"

?

$1 est"Content-Length:"

?

Lire une ligned'entrée

Extraire lesdonnées

correspondantes

Findes entrées ?

FinOui

Non

Non

Non

Non

Non

Oui

Oui

Oui

Oui

Page 24: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

24

Exemples (11)Exemples (11)

Système d’exploitation UNIX

Détecter les mots clés des données recherchées.Détecter les mots clés des données recherchées.Utiliser un patron par mot clé:Utiliser un patron par mot clé:

$1 == "Date:" $1 == "Date:" { actions… }{ actions… }

$1 == "From:" $1 == "From:" { actions… }{ actions… }

$1 == "Subject:" { actions… }$1 == "Subject:" { actions… }

$1 == "Content-Length:" { actions… }$1 == "Content-Length:" { actions… }

Page 25: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

25

Exemples (12)Exemples (12)

Système d’exploitation UNIX

Extraire les informations Extraire les informations correspondantes.correspondantes.• Il faut localiser les données à extraireIl faut localiser les données à extraire

• Utiliser la fonction Utiliser la fonction substr()substr() pour pour extraire les donnéesextraire les données

• Puisque les 4 informations seront Puisque les 4 informations seront extraites de la même façon, nous extraites de la même façon, nous créerons une fonction utilisateur créerons une fonction utilisateur nommée nommée extraitinfo()extraitinfo()

Page 26: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

26

Exemples (13)Exemples (13)

Système d’exploitation UNIX

La fonction utilisateur La fonction utilisateur extraitinfo() extraitinfo() function extraitinfo(ligne, motcle)function extraitinfo(ligne, motcle)

{{

return substr(ligne, length(motcle) + 2)return substr(ligne, length(motcle) + 2)

}}

ligneligne contient la ligne contient la ligne d’entréed’entrée

motclemotcle contient le mot clé contient le mot clé Date:, From:, Subject:, Date:, From:, Subject:, Content-Length:Content-Length:

Extraire la sous-chaîne de Extraire la sous-chaîne de ligneligne à partir de la position à partir de la position length(motcle) + 2length(motcle) + 2..

On veut passer par dessous On veut passer par dessous les caractères Espace après les caractères Espace après le mot clé.le mot clé.

Page 27: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

27

Exemples (14)Exemples (14)

Système d’exploitation UNIX

A-t-on besoin d’initialiser les variables ou constantes A-t-on besoin d’initialiser les variables ou constantes pour ce programme ?pour ce programme ?Oui. Les mots clés seront placés dans des variables globales. Oui. Les mots clés seront placés dans des variables globales.

(Patron BEGIN)(Patron BEGIN)

A-t-on besoin d’effectuer des tâches à la fin du A-t-on besoin d’effectuer des tâches à la fin du programme ?programme ?Oui. Afficher les données extraites à la sortie standard. Oui. Afficher les données extraites à la sortie standard.

(Patron END)(Patron END)

Page 28: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

28

Système d’exploitation UNIX#!/bin/sh#!/bin/sh

FICHIER_ENTETE=entete.tmpFICHIER_ENTETE=entete.tmp

cat "$FICHIER_ENTETE" | nawk 'cat "$FICHIER_ENTETE" | nawk '

BEGIN { DE = "From:"; DATE = "Date:"BEGIN { DE = "From:"; DATE = "Date:"

SUJET = "Subject:"; LONGUEUR = "Content-Length:"SUJET = "Subject:"; LONGUEUR = "Content-Length:"

}}

END { print "Source-> ", DeEND { print "Source-> ", De

print "Date de reception-> ", Dateprint "Date de reception-> ", Date

print "Sujet du courriel-> ", Sujetprint "Sujet du courriel-> ", Sujet

print "Longueur du corps-> ", Longueurprint "Longueur du corps-> ", Longueur

}}

$1 == DE { De = extraitinfo($0, DE) }$1 == DE { De = extraitinfo($0, DE) }

$1 == DATE { Date = extraitinfo($0, DATE) }$1 == DATE { Date = extraitinfo($0, DATE) }

$1 == SUJET { Sujet = extraitinfo($0, SUJET) }$1 == SUJET { Sujet = extraitinfo($0, SUJET) }

$1 == LONGUEUR { Longueur = extraitinfo($0, LONGUEUR) }$1 == LONGUEUR { Longueur = extraitinfo($0, LONGUEUR) }

function extraitinfo(ligne, motcle) {function extraitinfo(ligne, motcle) {

return substr(ligne, length(motcle) + 2)return substr(ligne, length(motcle) + 2)

}}

''

Fonction utilisateur Fonction utilisateur nawk(1)nawk(1). Toujours . Toujours définir à l’intérieur des définir à l’intérieur des apostrophes d ’un apostrophes d ’un programme programme nawk(1)nawk(1)..

Page 29: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

29

Exemples (15)Exemples (15)

Système d’exploitation UNIX

RésultatRésultatFrom [email protected] Fri Mar 17 15:51 EST 2000From [email protected] Fri Mar 17 15:51 EST 2000X-UIDL: f8d17591aadd380945dc16c5f506b9f7X-UIDL: f8d17591aadd380945dc16c5f506b9f7Received: from gpa.etsmtl.ca (tony [142.137.41.54])Received: from gpa.etsmtl.ca (tony [142.137.41.54]):: :: :::: :: ::Date:Date: Fri, 17 Mar 2000 15:57:28 -0500 Fri, 17 Mar 2000 15:57:28 -0500From:From: Tony Wong <[email protected]> Tony Wong <[email protected]>:: :: :::: :: ::To: Tony Wong <[email protected]>To: Tony Wong <[email protected]>Subject:Subject: TEST 1 TEST 1:: :: :::: :: ::Content-Length:Content-Length: 366 366Status: UStatus: U

centi 53> enteteinfocenti 53> enteteinfoSource-> Tony Wong <[email protected]>Source-> Tony Wong <[email protected]>Date de reception-> Fri, 17 Mar 2000 15:57:28 -Date de reception-> Fri, 17 Mar 2000 15:57:28 -05000500Sujet du courriel-> TEST 1Sujet du courriel-> TEST 1Longueur du corps-> 366Longueur du corps-> 366

Page 30: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

30

Exemples (16)Exemples (16)

Système d’exploitation UNIX

Nous pouvons modifier le programme pour faciliter le Nous pouvons modifier le programme pour faciliter le traitement.traitement.

Créer une fonction Bourne shell qui accepte en paramètre Créer une fonction Bourne shell qui accepte en paramètre le mot clé.le mot clé.

Cette fonction retournera les données extraites via la Cette fonction retournera les données extraites via la sortie standard.sortie standard.

Dans le programme Bourne shell, nous afficherons les Dans le programme Bourne shell, nous afficherons les données obtenues.données obtenues.

Page 31: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

31

Système d’exploitation UNIX#!/bin/sh#!/bin/sh

# enteteinfo2# enteteinfo2

FICHIER_ENTETE=entete.tmpFICHIER_ENTETE=entete.tmp

extrait () {extrait () {

##

# $1 contient le nom du fichier entete# $1 contient le nom du fichier entete

##

nawk -v MOTCLE="$1" 'nawk -v MOTCLE="$1" '

END { print Info }END { print Info }

$1 == MOTCLE { Info = substr($0, length(MOTCLE) + 2) }$1 == MOTCLE { Info = substr($0, length(MOTCLE) + 2) }

' "$FICHIER_ENTETE"' "$FICHIER_ENTETE"

}}

DATE=`extrait "Date:" | tr ':' '/'`DATE=`extrait "Date:" | tr ':' '/'`

DE=`extrait "From:"`DE=`extrait "From:"`

SUJET=`extrait "Subject:"`SUJET=`extrait "Subject:"`

LONGUEUR=`extrait "Content-Length:"`LONGUEUR=`extrait "Content-Length:"`

Fon

ctio

n B

ou

rne

Fon

ctio

n B

ou

rne

shell

shell

Pro

gra

mm

e

Pro

gra

mm

e

nawk(1)

nawk(1)

Passage de Passage de paramètre du Bourne paramètre du Bourne shell vers le shell vers le programme programme nawk(1)nawk(1)

Les mots clés sont passés à la Les mots clés sont passés à la fonction Bourne shell fonction Bourne shell extrait()extrait(). À . À son tour, elle passe le mot clé reçu son tour, elle passe le mot clé reçu au programme au programme nawk(1)nawk(1) via l’option via l’option -v-v

Page 32: 1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Programmation nawk(1)

32

Système d’exploitation UNIXecho "La date de reception> $DATE"echo "La date de reception> $DATE"

echo "La source est> $DE"echo "La source est> $DE"

echo "Le sujet du courriel> $SUJET"echo "Le sujet du courriel> $SUJET"

echo "La longueur du corps> $LONGUEUR »echo "La longueur du corps> $LONGUEUR »

centi 35> enteteinfo2centi 35> enteteinfo2

La date de reception> Fri, 17 Mar 2000 15/57/28 -0500La date de reception> Fri, 17 Mar 2000 15/57/28 -0500

La source est> Tony Wong <[email protected]>La source est> Tony Wong <[email protected]>

Le sujet du courriel> TEST 1Le sujet du courriel> TEST 1

La longueur du corps> 366La longueur du corps> 366

La suite du programme ...La suite du programme ...

Résultats obtenusRésultats obtenus