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

Slides:



Advertisements
Présentations similaires
GEF 243B Programmation informatique appliquée
Advertisements

Portée des variables VBA & Excel
Algorithmique et évaluation
Vocabulaire pour la passage du modèle conceptuel des données au modèle relationnel des données. MCDMRD EntitéTable PropriétésChamps, attribut IdentifiantClé
C.
Outils de développements
TP 3-4 BD21.
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
FLSI602 Génie Informatique et Réseaux
Algorithme et programmation
Initiation à la programmation et algorithmique cours 3
1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 5 Interpréteur de commande, Bourne shell,
Les requêtes La Requête est une méthode pour afficher les enregistrements qui répondent à des conditions spécifiques. La requête est donc un filtre.
Principes de programmation (suite)
Points importants de la semaine Les fonctions. La portée. La passage par copie. Les tableaux.
Structures de données linéaires
Partie 1 Etude de l'existant
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Filtre programmable nawk(1)
Chapitre IV LES STRUCTURES SIMPLES. Plan I- Les entrées II- Laffectation III- Les sorties.
Démarche de résolution de problèmes
Les éléments de base de l’algorithmique
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
Python La structure itérative
Algorithmique et Programmation
SELECT {* | Expression [Alias] [,...] } FROM Table [WHERE Condition] [ORDER BY { Expression | Alias } [ ASC | DESC ] [NULLS FIRST | NULLS LAST ] [,...]
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Structures de données IFT Abder Alikacem La classe string Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
Une nouvelle structure de données : les tableaux
Les Fonctions. Définir une fonction Sections de code indépendantes que lon peut appeler à nimporte quel moment et dans nimporte quel ordre. Bout de code.
Introduction à la programmation I Fonctions Structures de contrôle Structures de données (arrays simples et indexés) Variables locales et globales.
1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 4 Syntaxe des commandes, documentation standard,
1 GPA435 Systèmes dexploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 9 Exemples de programmation Bourne shell et nawk(1)
Sixième cours Les chaînes de caractères et le passage de paramètres par référence Passage de paramètres par référence String.h.
GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014.
GPA435 – Lab #2 partie 2 Explications compl é mentaires GPA435 – révision 2013, Tony Wong, ing., Ph.D.
GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie I 2014.
Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe.
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Chapitre 9 Les sous-programmes.
Chapitre 3 Syntaxe et sémantique.
Christine Bonnet SOURCES : « Samples » dOracle, « Oracle 8 » R. Chapuis PRO*C – C ++
Plan cours La notion de pointeur et d’adresse mémoire.
PHP 2° PARTIE : FONCTIONS ET FORMULAIRE
1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,
NORMALISATION DES LANGAGES DE PROGRAMMATION des Automates Programmables Industriels CEI
Types de données fondamentaux
1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 8 Filtres UNIX.
Animateur : Med HAIJOUBI
Limiter et trier des données
Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #8: Introduction aux filtres - Filtres UNIX Enseignant: Jean-Philippe.
Structures des données
Shell Equipe ID Bioinformatics Training Course June 2014.
JavaScript.
Scripts shell intro Un script bash est un fichier contenant une suite de commandes shell, exécutables par l'interpréteur (ici le programme /bin/bash),
Algorithmique et programmation en
Créer des packages.
Labo 4 : Les structures et les entrées et sorties
 Syntaxe du langage PHP
Cours LCS N°4 Présenté par Mr: LALLALI
1 Système d’exploitation Les scripts csh 1 ère Année Année Tienté HSU.
Conception de Programmes - IUT de Paris - 1ère année Quelques éléments du langage C++ Les références La surcharge de fonctions Les fonctions «
Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #10: Filtre programmable gawk(1) – Partie 2 Enseignant: Jean-Philippe.
Scripts et fonctions Instructions de contrôle
1 PHP 5 Notions fondamentales (niveau 1 cours #3) Formation continue – Cégep de Sainte-Foy François G Couillard.
GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 7 Neutralisation, redirection, décodage des paramètres,
Introduction à l’utilitaire
Introduction au langage PL/SQL
L'exécution d'un programme nécessite l'utilisation des ressources de l'ordinateur : temps de calcul pour exécuter les opérations, et l'occupation de la.
Transcription de la présentation:

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

2 Filtre programmable nawk(1) Les étapes nécessaires pour écrire un programme nawk(1) :Les étapes nécessaires pour écrire un programme nawk(1) : Comprendre le principe de traitement de nawk(1) section 9 à 9.3Comprendre le principe de traitement de nawk(1) section 9 à 9.3 Identifier les patrons légaux de nawk(1) section 9.4Identifier les patrons légaux de nawk(1) section 9.4 Identifier les actions légales de nawk(1) section 9.5Identifier les actions légales de nawk(1) section 9.5 Évidemment, faire les exercices de ce chapitre!Évidemment, faire les exercices de ce chapitre! Système dexploitation UNIX

3 Essentiel des traitements (1) Système dexploitation UNIX La provenance des données dentrée: La provenance des données dentrée: Fichiers spécifiés à la ligne de commande Fichiers spécifiés à la ligne de commande Via un tuyau ou la redirection Via un tuyau ou la redirection Lecture des données est réalisée automatiquement par nawk(1). Lecture des données est réalisée automatiquement par nawk(1). Séparation des lignes dentrée en champs est réalisée par nawk(1) : Séparation des lignes dentrée en champs est réalisée par nawk(1) : FS caractères de séparateur de champ FS caractères de séparateur de champ NF nombre de champs obtenus NF nombre de champs obtenus

4 Essentiel des traitements (2) Système dexploitation UNIX Chaque ligne dentrée est comparée à la séquence « patron - action »: Chaque ligne dentrée est comparée à la séquence « patron - action »: Sil y a correspondance entre la ligne dentrée et un patron, laction correspondante est exécutée. Sil y a correspondance entre la ligne dentrée et un patron, laction 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 dentrée est comparée à tous les énoncées « patron - action » du programme utilisateur. La ligne dentrée est comparée à tous les énoncées « patron - action » du programme utilisateur.

5 Patrons (1) Six types de patron: Six types de patron: BEGIN BEGIN Laction associée est toujours exécutée avant le traitement des lignes dentrée END END Laction associée est toujours exécutée à la fin des traitements des lignes dentrée expr expr Une expression arithémtique et/ou relationnelle La valeur non nulle ( 0) du résultat de lévaluation de expr provoque lexécution de laction associée Système dexploitation UNIX

6 Patrons (2) Six types de patron (suite): Six types de patron (suite): /regex/ /regex/ Une expression générique. La correspondance entre regex et la ligne dentrée provoque lexécution de laction associée Le symbole ~ représente lopérateur dappariement $0 ~ /^[0-9].*$/ expr_comp expr_comp Expression composée. Le patron est composé plus dun expr (/regex/) reliés par des opérateurs logiques ! Négation, || OU-logique, && ET-logique Système dexploitation UNIX ~ est équivalent à = pour une expression ordinaire

7 Patrons (3) Six types de patron (suite): Six types de patron (suite): expr_interv expr_interv Expression exprimant un intervalle Laction associée est exécutée pour toutes les lignes à lintérieur de l intervalle $1 > 5, $1 5, $1 < 100 Système dexploitation UNIX Ce patron signifie: Les lignes dentrée dont le champ 1 est plus grand que 5 et plus petit que 100. Laction associée à ce patron sera exécutée pour les lignes dentrée satisfaisant cette contrainte.

8 Action Les actions de nawk(1) sont composées: Les actions de nawk(1) 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 utilisateurs Fonctions utilisateurs function nomFunc (liste-parametres) { déclarations} Système dexploitation UNIX Liste-parametres sont des variables passées à la fonction. Elles sont locales à la fonction. Les variables utilisées dans une fonction sont automatiquement des variables globales. Une fonction peut retourner un résultat par linstruction return resultat

9 Programmation nawk(1) Système dexploitation UNIX Comment écrire un programme nawk(1) ? Comment écrire un programme nawk(1) ? Déterminer le but du programme Déterminer le but du programme Comprendre le format des données à traiter Comprendre le format des données à traiter Établir lalgorithme de traitement Établir lalgorithme de traitement Quelles sont les variables et constantes à initialiser dans le programme ? Quelles sont les variables et constantes à initialiser dans le programme ? Les initialiser dans laction 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 laction du patron END Les réaliser dans laction du patron END

10 Programmation nawk(1) Système dexploitation UNIX Scinder lalgorithme en une séquence de « patron - action » Scinder lalgorithme en une séquence de « patron - action » Chaque énoncée « patron - action » doit réaliser une patrie de lalgorithme Noubliez pas, les lignes dentrée sont comparées à toutes les énoncées « patron - action » Établir les patrons à utiliser: Établir les patrons à utiliser: Doit-on utiliser des expressions relationnelles ? Doit-on utiliser des expressions génériques ? Doit-on utiliser des expressions composées ? Doit-on utiliser des expressions dintervalle ?

11 Programmation nawk(1) Écrire les actions associées: Écrire les actions associées: Vérifier sil existe une fonction pré-définie pour accomplir la tâche Vérifier sil est nécessaire de créer une fonction utilisateur pour simplifier la programmation Vérifier sil est nécessaire de créer une fonction utilisateur pour simplifier la programmation Tester le programme nawk(1) : Tester le programme nawk(1) : Utiliser un petit nombre de données pour tester le programme Tester le programme partie par partie Tester le programme en intégrant toutes les parties ensembles Système dexploitation UNIX

12 Exemples (1) Fréquence des mots dans un texte Fréquence des mots dans un texte Dans le domaine de lanalyse textuelle, la fréquence des mots est un outil très utilisée dans lauthentification des documents. Les gens ont tendance à utiliser souvent les mêmes mots. Nous allons créer un petit programme capable de donner la fréquence dapparition des mots dans un texte Nous allons créer un petit programme capable de donner la fréquence dapparition des mots dans un texte Mots majuscules = Mots minuscules Système dexploitation UNIX

13 Exemples (2) Système dexploitation UNIXOrdinogramme Un tableau associatif est un tableau dans lequel lindice des éléments est une chaîne de caractères. Ex: tab["nom"] = "Tony" Nous utiliserons une expression générique et la fonction gsub() pour accomplir cette tâche Nous utiliserons linstruction print pour réaliser laffichage

14 Exemples (3) Système dexploitation UNIX Isolation des mots par gsub() revient à éliminer les caractères de ponctuation: Isolation des mots par gsub() revient à éliminer les caractères de ponctuation: gusb(/[.,:;!?(){}]/, "") Substitution globale du premier paramètre par le deuxième paramètre de la fonction Premier paramètre: les caractères entre crochets. Donc, reliés par un OU- logique implicit Deuxième paramètre: vide. Donc, substitution par le vide = élimination Note: Chaque mot dune ligne est automatiquement placé dans un champ par nawk(1)

15 Exemples (4) Confondre les mots majuscules et les mots minuscules: Confondre les mots majuscules et les mots minuscules: cat texte.txt | tr 'a-z' 'A-Z' > lignes.tmp Cette conversion est réalisée en dehors du programme nawk(1). Cette conversion est réalisée en dehors du programme nawk(1). On utilise la commande UNIX tr(1) pour effectuer la conversion minuscule - majuscule via un tuyau. On utilise la commande UNIX tr(1) pour effectuer la conversion minuscule - majuscule via un tuyau. Le texte majuscule est placé dans le fichier temporaire lignes.tmp Le texte majuscule est placé dans le fichier temporaire lignes.tmp Système dexploitation UNIX

16 Exemples (5) Compter les mots revient à stocker les mots dans un tableau associatif. Les indices du tableau sont les mots eux-mêmes et la valeur dun élément du tableau est le nombre dapparitions dun mot: Compter les mots revient à stocker les mots dans un tableau associatif. Les indices du tableau sont les mots eux-mêmes et la valeur dun élément du tableau est le nombre dapparitions dun mot: for (i=1; i<=NF; i++) compte[$i]++ Système dexploitation UNIX NF est le nombre de champs de la ligne dentrée. Dans notre contexte, NF est le nombre de mots de la ligne dentrée $i représente le contenu du i e champ. Dans notre contexte, il s agit du i e mot de la ligne. Compte est le tableau associatif. Chaque élément de ce tableau est un mot distinct.

17 Exemples (6) Système dexploitation UNIX A-t-on besoin dinitialiser les variables ou constantes pour ce programme ? A-t-on besoin dinitialiser les variables ou constantes pour ce programme ? Non. Donc pas de patron BEGIN ni son action associée. A-t-on besoin deffectuer des tâches à la fin du programme ? A-t-on besoin deffectuer des tâches à la fin du programme ? Oui. Il faut afficher le nombre dapparitions des mots et le nombre total des mots rencontrés. Cette tâche sera réalisée dans laction associée au patron END.

18 Système dexploitation UNIX#!/bin/sh # comptemot # Programme utilisant nawk(1) pour compter le nombre d'apparitions # des mots dans un texte # D'abord convertir le texte en majuscule et le mettre dans un # fichier temproraire "lignes.tmp" cat texte.txt | tr 'a-z' 'A-Z' > lignes.tmp nawk ' # A la fin du programme afficher le resultat en ordre decroissant # numerique 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: " total print "Nombre total des mots: " total } { gsub(/[.,:;!?(){}]/,"") # elimine la ponctuation { gsub(/[.,:;!?(){}]/,"") # elimine la ponctuation for (i=1; i<=NF; i++) # placer les mots trouves dans un for (i=1; i<=NF; i++) # placer les mots trouves dans un compte[$i]++ # tableau associatif compte[$i]++ # tableau associatif } ' lignes.tmp

19 Exemples (7) Système dexploitation UNIX Résultat Résultat Je me tutoie Je me tutoie depuis deja longtemps Je me serre, je me sors Je me berce, je me borde et je m'endors Fatigue de moi je reve de toi Je te majuscule Je te point d'exclame Je te vouvoie Mais lorsque je nous trait d'union Ca me reveille Or je me minuscule Je me rendors Point James Corcoran centi 10> comptemot | more 14 JE 9 ME 3 TE 2 TUTOIE 2 POINT 2 DE 1 VOUVOIE 1 TRAIT 1 TOI 1 SORS 1 SERRE 1 REVEILLE 1 REVE : : : 1 BERCE Nombre total des mots: 60

20 Exemples (8) Système dexploitation UNIX Principe de fonctionnement Principe de fonctionnement Le tableau associatif utilise les mots du texte comme indice. Le tableau associatif utilise les mots du texte comme indice. Chaque mot distinct est un élément du tableau associatif. Chaque mot distinct est un élément du tableau associatif. Le contenu du tableau associatif est le nombre d apparitions des mots dans le texte. Le contenu du tableau associatif est le nombre d apparitions des mots dans le texte.

21 Exemples (9) Système dexploitation UNIX Extraire les informations dun en-tête de courriel. Extraire les informations dun en-tête de courriel. Len-tête est placé au préalable dans un fichier temporaire. Len-tête est placé au préalable dans un fichier temporaire. Le programme doit extraire: Le programme doit extraire: Ladresse de la source La date et lheure de réception Le sujet du courriel La longueur du corps du courriel

22 Exemples (10) Système dexploitation UNIX From Fri Mar 17 15:51 EST 2000 X-UIDL: f8d17591aadd380945dc16c5f506b9f7 Received: from gpa.etsmtl.ca (tony [ ]) by exa.gpa.etsmtl.ca (8.9.1a/8.9.1) with ESMTP id PAA04884 for ; Fri, 17 Mar :51: (EST) Message-ID: Message-ID: Date: Fri, 17 Mar :57: From: Tony Wong From: Tony Wong ::: MIME-Version: 1.0 To: Tony Wong To: Tony Wong Subject: TEST 1 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=iso Content-Length: 366 Status: U Ces informations sont à extraire par notre programme. Attention! Le programme nécessite len-tête pré-enregistré dans un fichier. Les Date:, From:, subject: et Content-Length: sont situés dans le premier champ ($1)

23 Système dexploitation UNIXOrdinogramme Ces étapes sont réalisées auto- matiquement par nawk(1).

24 Exemples (11) Système dexploitation 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é: $1 == "Date:" { actions… } $1 == "From:" { actions… } $1 == "Subject:" { actions… } $1 == "Content-Length:" { actions… }

25 Exemples (12) Système dexploitation UNIX Extraire les informations correspondantes. Extraire les informations correspondantes. Il faut localiser les données à extraireIl faut localiser les données à extraire Utiliser la fonction substr() pour extraire les donnéesUtiliser la fonction substr() pour extraire les données Puisque les 4 informations seront extraites de la même façon, nous créerons une fonction utilisateur nommée extraitinfo()Puisque les 4 informations seront extraites de la même façon, nous créerons une fonction utilisateur nommée extraitinfo()

26 Exemples (13) Système dexploitation UNIX La fonction utilisateur extraitinfo() La fonction utilisateur extraitinfo() function extraitinfo(ligne, motcle) { return substr(ligne, length(motcle) + 2) return substr(ligne, length(motcle) + 2)} ligne contient la ligne dentrée motcle contient le mot clé Date:, From:, Subject:, Content- Length: Extraire la sous-chaîne de ligne à partir de la position length(motcle) + 2. On veut passer par dessous les caractères Espace après le mot clé.

27 Exemples (14) Système dexploitation UNIX A-t-on besoin dinitialiser les variables ou constantes pour ce programme ? A-t-on besoin dinitialiser les variables ou constantes pour ce programme ? Oui. Les mots clés seront placés dans des variables globales. (Patron BEGIN) A-t-on besoin deffectuer des tâches à la fin du programme ? A-t-on besoin deffectuer des tâches à la fin du programme ? Oui. Afficher les données extraites à la sortie standard. (Patron END)

28 Système dexploitation UNIX#!/bin/shFICHIER_ENTETE=entete.tmp cat "$FICHIER_ENTETE" | nawk ' BEGIN { DE = "From:"; DATE = "Date:" SUJET = "Subject:"; LONGUEUR = "Content-Length:" SUJET = "Subject:"; LONGUEUR = "Content-Length:" } END { print "Source-> ", De print "Date de reception-> ", Date print "Date de reception-> ", Date print "Sujet du courriel-> ", Sujet print "Sujet du courriel-> ", Sujet print "Longueur du corps-> ", Longueur print "Longueur du corps-> ", Longueur } $1 == DE { De = extraitinfo($0, DE) } $1 == DATE { Date = extraitinfo($0, DATE) } $1 == SUJET { Sujet = extraitinfo($0, SUJET) } $1 == LONGUEUR { Longueur = extraitinfo($0, LONGUEUR) } function extraitinfo(ligne, motcle) { return substr(ligne, length(motcle) + 2) return substr(ligne, length(motcle) + 2)}' Fonction utilisateur nawk(1). Toujours définir à lintérieur des apostrophes d un programme nawk(1).

29 Exemples (15) Système dexploitation UNIX Résultat Résultat From Fri Mar 17 15:51 EST 2000 X-UIDL: f8d17591aadd380945dc16c5f506b9f7 Received: from gpa.etsmtl.ca (tony [ ]) ::: Date: Fri, 17 Mar :57: From: Tony Wong From: Tony Wong ::: To: Tony Wong To: Tony Wong Subject: TEST 1 ::: Content-Length: 366 Status: U centi 53> enteteinfo Source-> Tony Wong Source-> Tony Wong Date de reception-> Fri, 17 Mar :57: Sujet du courriel-> TEST 1 Longueur du corps-> 366

30 Exemples (16) Système dexploitation UNIX Nous pouvons modifier le programme pour faciliter le traitement. Nous pouvons modifier le programme pour faciliter le traitement. Créer une fonction Bourne shell qui accepte en paramètre le mot clé. Créer une fonction Bourne shell qui accepte en paramètre le mot clé. Cette fonction retournera les données extraites via la sortie standard. Cette fonction retournera les données extraites via la sortie standard. Dans le programme Bourne shell, nous afficherons les données obtenues. Dans le programme Bourne shell, nous afficherons les données obtenues.

31 Système dexploitation UNIX#!/bin/sh # enteteinfo2 FICHIER_ENTETE=entete.tmp extrait () { # # $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 ':' '/'` DE=`extrait "From:"` SUJET=`extrait "Subject:"` LONGUEUR=`extrait "Content-Length:"` Fonction Bourne shell Programme nawk(1) Passage de paramètre du Bourne shell vers le programme nawk(1) Les mots clés sont passés à la fonction Bourne shell extrait(). À son tour, elle passe le mot clé reçu au programme nawk(1) via loption -v

32 Système dexploitation UNIX echo "La date de reception> $DATE" echo "La source est> $DE" echo "Le sujet du courriel> $SUJET" echo "La longueur du corps> $LONGUEUR » centi 35> enteteinfo2 La date de reception> Fri, 17 Mar /57/ La source est> Tony Wong La source est> Tony Wong Le sujet du courriel> TEST 1 La longueur du corps> 366 La suite du programme... Résultats obtenus