Programme awk------introduction rapide



Documents pareils
Introduction à MATLAB R

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

Les structures. Chapitre 3

Algorithmique et Programmation, IMA

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Recherche dans un tableau

AWS avancé. Surveiller votre utilisation d EC2

Introduction au langage C

L'instruction if permet d'exécuter des instructions différentes selon qu'une condition est vraie ou fausse. Sa forme de base est la suivante:

STAGE IREM 0- Premiers pas en Python

Guide à destination des Conseillers pédagogiques pour accompagner la séance Groupe TICE 34

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Asset Management Software Client Module. Manuel d utilisation


Semestre3 (Licence Economie et Gestion) EXCEL : interface. Une fois lancé, Excel crée par défaut un "classeur" nommé «classeur1.xls».

Compléments de documentation Scilab : affichage de texte et formatage de nombres

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

1. Structure d'un programme FORTRAN 95

3IS - Système d'exploitation linux - Programmation système

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

TeamViewer 9 Manuel Management Console

SOMMAIRE. Travailler avec les requêtes... 3

Automatisation d'une Facture 4. Liste Déroulante Remises Case à cocher Calculs

Cours Langage C/C++ Programmation modulaire

Les failles Format String

Sage Start Saisie des collaborateurs Instructions. A partir de la version

1. Introduction Création d'une requête...2

Initiation à la programmation en Python

Créer une base de données

Cours Programmation Système

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Cours Informatique Master STEP

Publipostage avec Calc

ACTIVITÉ DE PROGRAMMATION

Utiliser Access ou Excel pour gérer vos données

TD/TP 1 Introduction au SDK d Android

Traitement de texte : Quelques rappels de quelques notions de base

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

Compilation (INF 564)

Utilisation d objets : String et ArrayList

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Microsoft OSQL OSQL ou l'outil de base pour gérer SQL Server

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

FreeNAS Shere. Par THOREZ Nicolas

Programmation Web. Madalina Croitoru IUT Montpellier

Créer un tableau avec LibreOffice / Calc

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Guide de l'utilisateur

Présentation du PL/SQL

Le stockage local de données en HTML5

I. Introduction aux fonctions : les fonctions standards

Mesurer les performances (CPU) sous Linux

Rappels Entrées -Sorties

HANSAWORLD UNIVERSITY. Standard Facturation Version 6.3 HansaWorld Ltd.

Utilisateur. Auteurs. Laurent project engineer

Présentation du langage et premières fonctions

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Uniformiser la mise en forme du document. Accélère les mises à jour. Permets de générer des tables de matières automatiquement.

TEXT MINING von 7

Comment Utiliser les Versions, les Modification, les Comparaisons, Dans les Documents

Premiers Pas en Programmation Objet : les Classes et les Objets

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Exemples et tutoriels Version 7.5. Tutoriel de l'exemple Recrutement de personnel pour IBM Process Designer

Chapitre 1 : Introduction aux bases de données

TP 1. Prise en main du langage Python

Bases de programmation. Cours 5. Structurer les données

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/ Présentation. 1.2 Ressources

Programmation système de commandes en C

TABLEAU CROISE DYNAMIQUE

Dans l'article précédent, vous avez appris

Impact des robots d indexation sur le cache de second niveau de SPIP IMBERTI Christophe - SG/SPSSI/CP2I/DO Ouest 06/06/2012 mis à jour le 05/07/2012

Algorithmique avec Algobox

Formation. Module WEB 4.1. Support de cours

Microsoft Excel. Tableur

FAQ : Procédure d'import de fichiers dwg/pdf/dxf

SAP Lumira Version du document : Guide de l'utilisateur de SAP Lumira

Programmation système I Les entrées/sorties

Perl Orienté Objet BioPerl There is more than one way to do it

Chap III : Les tableaux

Télécom Nancy Année

Conventions d écriture et outils de mise au point

NOTE D'APPLICATION CONCERNANT LA MISE EN SERVICE DE MATERIELS SUR RESEAU IP

Partie 1. Fonctions plus complexes dans Excel. Fonctions Si(), Et(), Ou() et fonctions imbriquées. Opérateurs logiques. I.1.

Utiliser ma messagerie GMAIL

Export et import des RIB et IBAN avec les progiciels LD

Il se peut que certains sites Web ne s'affichent pas correctement ou ne fonctionnent pas dans Internet Explorer 8 ou Internet Explorer 9 Bêta :

La gestion du son en AS3 est logique si on se réfère au fonctionnement d'une table de mixage audio!

Les chaînes de caractères

1 Gestionnaire de Données WORD A4 F - USB / / 6020 Alco-Connect

Guide d'installation du connecteur Outlook 4

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Guide d'initiation aux. certificats SSL. Faire le bon choix parmi les options qui s'offrent à vous en matière de sécurité en ligne. Document technique

Guide Utilisateur - Guide général d'utilisation du service via Zdesktop ou Webmail v.8. Powered by. - media-2001.communication &.

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

MODE D'EMPLOI DU CONTRIBUTEUR WEB UAPV "CONTRIBUER DANS UNE RUBRIQUE DU SITE WEB"

Vue d ensemble de Windows PowerShell

Répondre à un courrier - Transférer un courrier 20

Transcription:

Programme awk------introduction rapide Introduction Historique Le nom de awk vient de ses trois concepteurs : Alfred V. Aho, Peter J. Weinberger et Brian W. Kernighan. La version originale fut créée en 1977 dans les laboratoires AT & TBell. En 1985, une nouvelle version rend le langage plus puissant et implémente la possibilité de créer des fonctions. En 1986, Paul Rubin et Jay Fenlason implémentent la version GNU de awk, avec les contributions de Richard Stallman et John Woods. C'est la naissance de gawk. En 1988 et 1989, David Trueman et Arnold Robbins s'occupent de la compatibilité de awk/gawk jusqu'à aujourd'hui. Ils sont également responsables du suivi des bugs, des améliorations de performance, du support des standards et de l'implémentation de nouvelles propriétés. Utilisations Le langage awk est très efficace dans la gestion de fichiers avec récupération d'informations et transformation des données. Il permet : - la manipulation de fichiers texte en tous genres - le support de petites bases de données au format personnel - la génération de rapports - la validation/les tests de données - la production d'index et la conversion de documents - la création de scripts CGI etc. Caractéristiques Une grande partie de la syntaxe a été empruntée au C : on dispose de fonction, d'instructions de contrôle (for, if else, etc.). Malgré cela, awk reste un langage non typé, ce qui permet une plus grande souplesse. Vocabulaire - Arrangement : détermine sur quels enregistrements doit être appliquée l'action. Synonyme : motif. - Enregistrements : chaînes de caractères séparées par des retours chariots. En général, ce sont les lignes. - Champs : chaînes de caractères séparées par des espaces. En général, ce sont les mots. Principe Awk est en gros un langage de traitement de tableaux. Autrement dit, il est dédié à des

informations qui peuvent être groupées en enregistrements et en champs. Le programme awk explore un ou plusieurs fichiers d'entrée à la recherche d'arrangements et il exécute des actions sur les enregistrements comportant ces arrangements. Les arrangements-actions ont la forme : arrangement {action(s) Syntaxe La syntaxe de awk est la suivante : awk [-F] [-v var=valeur] 'programme' fichier ou awk [-F] [-v var=valeur] -f fichier-commande fichier - L'argument -F doit être suivi du séparateur de champ (ici, ':') : -F: - L'argument -f est suivi du nom du fichier qui contient les lignes de commandes. Cela évite de tout écrire entre les guillemets simples. - L'argument -v définit une variable ('var' dans l'exemple) qui sera utilisée par la suite dans le programme. Un programme awk possède la structure suivante: arrangement {action. Quand il n'y a pas de critère c'est que l'action s'applique à toutes les lignes du fichier. Utilisation Considérons, à titre d'exemple, le fichier de données exemple.txt : helene 56 edu hcyr@sun.com jean 32 ri jeanc@inexpress.net julie 22 adm juliem@sympatico.ca michel 24 inf michel@uqo.ca richard 25 inf rcaron@videotron.ca Si on tape :

$awk '{print' exemple.txt Le contenu du fichier exemple.txt s'affiche à l'écran. La même chose, écrite différemment donnerait : $awk '{print $0' exemple.txt La variable $0 représente un enregistrement. Il existe aussi $1, $2,, $NF représentant chaque champ de l'enregistrement courant. Le symbole $ est utilisé comme spécificateur de colonne. NF est le nombre de champs de l'enregistrement. Les variables prédéfinies ARGC ARGV FILENAME FNR NF NR FS RS RLENGTH RSTART Nombre d'arguments de la ligne de commande Tableau (de ARGV[0] à ARGV[ARGC] des arguments de la ligne de commande Nom du fichier sur lequel on applique les actions Nombre d'enregistrements du fichier Nombre de champs de l'enregistrement courant Nombre d'enregistrements déjà lus Séparateur de champs (par défaut, un espace) Séparateur d'enregistrements (par défaut, '\n') Longueur de la chaîne trouvée Début de la chaîne trouvée La commande awk suivante exécutée sur le fichier ci-dessus affiche le premier champ. Comme aucun arrangement n'a été spécifié, l'action {print $1 s'applique à tous les enregistrements du fichier :

$awk '{print $1' exemple.txt helene jean julie michel richard Notez la présence d'apostrophes pour protéger le programme de toute interprétation que pourrait faire le shell de certains caractères spéciaux. L'arrangement NR > 1 pourrait être spécifié pour sauter le premier enregistrement : $awk 'NR>1 {print $1' exemple.txt jean julie michel richard Le programme awk pourrait aussi afficher les deux premiers champs (champ 2, puis champ 1) et comporter une comparaison pour limiter la sélection aux seuls enregistrements dont le second champ est supérieur à 24 : $awk '{if($2>24) print $2, $1' exemple.txt 56 helene 32 jean 25 richard Nous aurions pu obtenir le même résultat en spécifiant l'arrangement $2 > 24, au lieu d'inclure la commande if : $awk '$2>24 {print $2, $1' exemple.txt Au lieu de la commande print, nous pourrions utiliser la commande printf qui permet le formatage. Elle fonctionne comme son équivalent dans le langage C. Les masques de formatage de la commande printf %-10s et %6d signifient respectivement

d'afficher une chaîne de caractères sur 10 colonnes et de la justifier à gauche, puis d'afficher un champ numérique sur 6 colonnes (justifié à droite par défaut) : $awk '{if($2>24) printf("%-10s %6d\n", $1, $2)' exemple.txt helene 56 jean 32 richard 25 Les fonctions de traitement de chaîne Il existe des fonctions préexistantes qui permettent de faire certains traitements sur les chaîne : substr(s,p) substr(s,p,n) index(s,t) length(s) match(s,n) Extrait le morceau de la chaîne s commençant à la position p Renvoie la sous-chaîne en question Extrait le morceau de la chaîne s commençant à la position p et de longueur n Renvoie la sous-chaîne en question Recherche la sous-chaîne t dans la chaîne s Renvoie la position de la première occurrence de t, dans s, et 0 s'il n'y en a aucune Longueur d'une chaîne Renvoie la longueur Effectue un test de reconnaissance du motif r sur la chaîne s si s est reconnue, renvoie la position du premier caractère associé à la reconnaissance sinon, renvoie 0 sub(r,s) Remplace la première occurrence de r par s dans $0 Renvoie le nombre de substitution : 0 ou 1 sub(r,s,t) Remplace la première occurrence de r par s dans la chaîne t Renvoie le nombre de substitution : 0 ou 1

gsub(r,s) Remplace toutes les occurrences de r par s dans $0 Renvoie le nombre de substitution : de 0 à n gsub(r,s,t) Remplace toutes les occurrences de r par s dans la chaîne t Renvoie le nombre de substitution : de 0 à n Les blocs END et BEGIN Normalement, awk exécute chaque bloc (délimités par des {) de votre script une seule fois. Mais certaines situations nécessitent d'initialiser du code avant que awk ne parcourt le fichier en entrée. C'est à ça que sert le bloc BEGIN. Cette partie permet, par exemple, d'initialiser des variables, ou ouvrir des fichiers auxiliaires. Dans le même ordre d'idée, le bloc END permet d'exécuter des commandes après que le fichier a été parcouru. Typiquement, c'est l'endroit idéal pour fermer les fichiers auxiliaires ouverts précédemment ou réaliser des statistiques. Bref, tout ce qui ne peut se faire qu'une fois toutes les données connues et traitées. Grâce à ces blocs, nous pouvons ajouter un titre à notre liste en utilisant l'arrangement BEGIN pour lequel l'action s'applique avant la lecture des enregistrements (la commande awk de cet exemple a été decomposée en plusieurs lignes ici afin de mieux l'illustrer, mais elle doit être entrée sur une même ligne) : $awk 'BEGIN {printf("nom\t\tnuméro\n---------------\n") NR>=1 {if($2>24){printf("%-10s %6d\n", $1, $2)' exemple.txt Nom Numéro --------------- helene 56 jean 32 richard 25 Il ne reste plus qu'à faire le total des valeurs contenues dans le second champ et de les afficher à la fin. L'arrangement END s'applique à la fin de la lecture de tous les enregistrements. Le programme de awk, devenant un peu long, peut être enregistré dans un fichier et son nom passé en paramètre en utilisant l'option -f. Si le programme est enregistré dans fichier liste.awk comme suit :

BEGIN { printf("nom\t\tnuméro\n---------------\n"); total = 0; NR>=1 { if($2>24) { printf("%-10s %6d\n", $1, $2); total += $2; END { printf("\t\t-------\n\t\t%6d\n", total) La commande awk suivante faisant appel à ce fichier produirait le même résultat : $awk -f liste.awk exemple.txt Nom Numéro --------------- helene 56 jean 32 richard 25 ------ 113 Autres instructions du programme awk Le langage de awk comporte les instructions suivantes : if(condition) instruction [else instruction] while(condition) instruction for(expression; condition; expression) instruction break

continue # commentaires next # saute les arrangements résiduels de cet # enregistrement exit # saute le reste des enregistrements Les expressions sont des entiers ou des chaînes de caractères et sont assemblées par les opérateurs +, -, *, /, % et la concatenation (un espace). Les opérateurs de C : ++ --, +=, -=, *=, /= et %= sont également valides. Les variables peuvent être des scalaires, des tableaux (notation a[i]) ou des champs ($1, $2, etc.). Les constantes de chaînes de caractères sont délimités par des guillemets ("). La fonction length donne la longueur de l'argument qui lui est présenté ou de toute la ligne s'il n'y a pas d'argument. Particularité du langage Une instruction ne doit pas forcément se finir par un ';' si elle est seule sur la ligne, mais obligatoirement dans le cas contraire (plusieurs instructions sur la même ligne) : printf("%-10s %6d\n", $1, $2); total += $2; mais printf("\t\t-------\n\t\t%6d\n", total) Les fonctions Voici un exemple très simple : function Bonjour(Ajout) { print"bonjour " Ajout # Appel de la fonction BEGIN { Bonjour("tout le monde")

Conclusions Awk n'est certainement pas aussi puissant que d'autres outils conçus dans des buts similaires, mais il a le grand avantage d'avoir la possibilité d'écrire de petits programmes adaptés à nos besoins, en très peu de temps. Awk est très bien adapté pour les raisons qui ont conduit à sa construction : lire des lignes et agir en fonction de leur contenu. Des fichiers comme /etc/password s'avèrent idéaux pour être traités et reformatés par Awk. Mais le langage possède ses limites : - il ne contient pas de débuggeur - la gestion des commandes externes est peu sûre ainsi que l'exploitation des codes retours et des erreurs. Ressources - Sed & Awk (Nutshell handbook) par Dale Dougherty - la FAQ : www.faqs.org/faqs/computer-lang/awk/faq/index.html - un turoriel : sparky.rice.edu/~hartigan/awk.html - le guide utilisateur de gawk : www.gnu.org/software/gawk/manual/gawk.html - et bien sûr : Google!