Tuteur Pour Le Langage AWK - Gilles HUNAULT

Tuteur pour le langage AWK

novalid

Texte du Tuteur écrit par Gilles HUNAULT

Consultez aussi la liste des autres tuteurs (langages, logiciels, systèmes d'exploitations...) ...

Table des Matières

Le langage Awk

- Introduction au langage - Exemple élémentaire de parcours de fichier - Variables et Fonctions - Instructions en Awk - Expressions régulières et filtrage - Exercice de révision - Compléments sur Awk - Un exemple difficile en Awk sous Dos et sous Unix

Une dizaine d'exemples gradués

# Xmp1.Awk : numérotation des lignes d'un fichier # Xmp2.Awk : numérotation cadrée des lignes d'un fichier # Xmp3.Awk : détection simple de chaine # Xmp4.Awk : détection par expression régulière # Xmp5.Awk : un bonjour amélioré # Xmp6.Awk : table de multiplication # Xmp7.Awk : moyenne de classe # Xmp8.Awk : un petit dictionnaire # Xmp9.Awk : gestion de répertoire

INTRODUCTION

Le langage AWK est prévu pour traiter des fichiers texte. Si Prog.Awk contient le programme, et si on veut traiter le fichier Demo.Txt, on écrit : AWK -fPROG.AWK DEMO.TXT. Il y a ouverture du fichier, parcours ligne par ligne et action éventuelle, puis fermeture du fichier. La ligne courante a pour nom fixé $0 ; elle contient NF mots ; le ième mot s'appelle $i . L'affichage se fait par print ou printf (f pour formatté).

Le traitement de chaque ligne se fait entre accolades { et } . On délimite les instructions par un ; . Les commentaires commencent par # ; on distingue majuscule et minuscule.

La syntaxe de base est la même que celle du langage C, sauf qu'on ne déclare pas les variables.

EXEMPLES

Avec le programme { print $1 " moyenne " ($2 +$3)/2 } et le fichier : BOBY 18 5 ZELYNOU 6 11 ANTIN 8 4 BOB 16 8 15 IZEL 16 18 12 on obtient comme affichage : BOBY moyenne 11.5 ZELYNOU moyenne 8.5 ANTIN moyenne 6 BOB moyenne 12 IZEL moyenne 17 De même, avec le programme { print $1 printf(" moyenne %5.2f\n",($2+$3)/2 ) } # fin de traitement de la ligne courante et le fichier : BOBY 18 5 ZELYNOU 6 11 ANTIN 8 4 BOB 16 8 15 IZEL 16 18 12 on obtient comme affichage : BOBY moyenne 11.50 ZELYNOU moyenne 8.50 ANTIN moyenne 6.50 BOB moyenne 12.00 IZEL moyenne 17.00

VARIABLES ET FONCTIONS

Awk met à la disposition du programmeur des variables NR numéro global de l'enregistrement FNR numéro local de l'enregistrement FILENAME nom du fichier ouvert ARGV vecteur des arguments passés et des fonctions length(H) donne la longueur de H substr(C,D,F) renvoie F caractères de C à partir de D index(T,C) donne la position de C dans T ou 0 system(D) exécute la commande dos D close(F) ferme la fichier F gsub(R,S,T) remplace R par S dans T Les éléments de tableaux se notent entre crochets. Ainsi T[i] désigne l'élément en position i (i peut être numérique ou caractère).

INSTRUCTIONS

Les instructions classiques sont = affectation if conditionnelle for boucle pour while boucle tant que ++ incrémentation de 1 += incrémentation variable exemple : while( i*i < n ) { i++ } for (i=a;i TMP.TXT) Répertoire de G:\ AUTOEXEC BAT 236 8-09-91 11:37p CONFIG SYS 254 7-27-91 8:35a ESSAI AWK 648 4-13-90 11:40a S 647 8-11-91 1:47p STATDIR AWK 648 4-13-90 11:40a 5 Fichiers 776192 octets disponibles le programme /-/ && $1 !~ /^\./ { if (NF < 5) { $3 = $2 ; $2 = "???" } tot[$2] += $3 ; nb[$2] ++ } END { for (ext in tot) printf ("%-3s %3d %8d\n" , ext , nb[ext] , tot[ext] ) } affiche ??? 1 647 AWK 2 1296 BAT 1 236 SYS 1 254 Sous Unix, le même exercice donne # Xmp9.Awk : gestion de r‚éperoire BEGIN { fs="DIR.DIR" ; system("ls -al > " fs) ; close(fs) ; nbf = 0 for (iar=1;iar 0) { ext = substr($9,1+ip) } else { ext = "???" } tot[ext] += $5 ; nb[ext] ++ ; nbf++} END { print " ext nb_fich cumul_taille" for (ext in tot) printf ("%-15s %3d %12d\n" , ext , nb[ext] , tot[ext] ) system("rm " fs) if (nbf==0) { print " mais je n'ai vu aucun fichier !! "} }

Cliquez ici pour une dizaine d'exemples gradués

Il est possible de récupérer le manuel de référence pour Gawk ici et une version sans doute plus récente là.

Tag » Apprendre Langage Awk