Obligement - L'Amiga au maximum

Mardi 23 avril 2024 - 20:38  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in english


Réseaux sociaux

Suivez-nous sur X




Liste des jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z,
ALL


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


En pratique : Utilisation de GAwk
(Article écrit par Pascal Amiable et extrait d'Amiga News Tech - novembre 1991)


Nous entamons ici une nouvelle série dont le but est de vous initier à l'utilisation de programmes compatibles Unix et de vous faire découvrir un certain nombre d'utilitaires du domaine public qui de par leur qualité, valent bon nombre de produits du commerce.

Nous allons commencer ce mois-ci par GAwk (abréviation de GNU Awk), un langage de traitement de fichiers ASCII. C'est l'aboutissement de la réécriture de l'utilitaire Unix Awk dans le cadre du projet GNU (d'où son nom de GAwk), projet visant à améliorer les fonctionnalités et la portabilité des commandes Unix sur d'autres systèmes d'exploitation, tout en restant compatible avec les anciennes.

Le langage Awk a été écrit à l'origine par trois célèbres acteurs du monde Unix, à savoir Aho, Weinberger et Kernighan (vous savez, un des papas du C). GAwk est compatible avec la version System V release 4 d'Unix.

Fonctions et syntaxe

La documentation Unix officielle décrit la fonctionnalité de Awk (et par extension de GAwk) comme une commande permettant de réaliser des recherches sur des lignes spécifiques d'un fichier ASCII et d'effectuer des traitements en fonction du résultat de ces recherches.

Pour expliquer un peu plus cette définition, je dirais que GAwk est un logiciel de traitement des chaînes de caractères d'un fichier ASCII, plus puissant que grep, dans la mesure où il autorise la réalisation de traitements sur ces chaînes de caractères là où grep se contente de les visualiser.

Les différentes fonctionnalités de GAwk sont :
  • Traitement de données numériques.
  • Utilisation de variables et de tableaux unidimensionnels.
  • Contrôle des flots de données d'entrée.
  • La sélection et utilisation de motifs ("pattern" en anglais) de recherche.
  • Besoin d'aucun compilateur d'aucune sorte pour l'analyse des traitements à effectuer.
GAwk lit chaque fichier d'entrée dans l'ordre indiqué lors du passage de la commande (Cf. description de la syntaxe ci-dessous). Si le nom du fichier est "-" où s'il n'existe aucun nom de fichier alors GAwk lit l'entrée standard (typiquement l'entrée clavier).

Voyons de manière rapide comment cela fonctionne. La commande GAwk travaille ligne par ligne. Pour chaque ligne, elle cherche à détecter la correspondance entre la ligne et la liste des motifs définis par l'utilisateur. Quand elle trouve l'occurrence d'un motif dans la ligne, elle exécute l'action associée à ce motif et renvoie le résultat sur la sortie standard (par défaut l'écran).

La syntaxe de la commande telle qu'elle est décrite dans le manuel est la suivante :

GAwk [-F caractère] [-f Programme] [--] [fichier...]
  • "caractère" permet d'indiquer le caractère séparateur de champs.
  • "programme" indique le nom du programme Awk à exécuter.
  • "--" indique" la fin des options. Ceci est très utile pour autoriser les noms des arguments des programmes sources à commencer par le caractère "-".
  • "fichier" correspond à la liste des fichiers à traiter.
Langage ou pas langage

GAwk ressemble plus à un véritable langage qu'à un simple utilitaire dans la mesure où l'on est amené à programmer des actions précises devant survenir si certaines conditions sont réunies, et ce à l'aide d'un langage structuré basé sur le couple motif/actions. Pour nous en persuader, voyons plus en détails le mécanisme de traitement de GAwk et la manière dont on peut le programmer.

GAwk commence par lire et contrôler la syntaxe de toutes les paires "motif/actions" du programme. Si aucune erreur de syntaxe n'est détectée, il transforme le programme en une série d'instructions internes (aucun résultat de cette pseudo-compilation ne sort de la commande). A ce moment, le traitement ligne par ligne des fichiers spécifiés peut commencer.

GAwk lit une ligne du fichier d'entrée et la compare à chaque motif du programme, effectuant l'action associée dans le cas où le test de comparaison est vrai. Il passe ensuite à la prochaine ligne, et continue ainsi jusqu'à la dernière du dernier fichier d'entrée.

La commande GAwk considère chaque ligne du fichier d'entrée comme une suite de champs séparés par un caractère particulier et se terminant par une fin de ligne. Par défaut, le caractère servant de séparateur entre deux champs est le caractère "Espace". Il est toutefois possible de le changer par celui de votre choix.

En effet, ce séparateur est contenu dans une variable spéciale FS (Field Separator). Pour changer de séparateur, il vous suffit d'affecter à FS autre chose que le blanc " ". Ainsi, l'instruction GAwk...

FS = '.'

...définit le point comme séparateur.

Un séparateur peut également être une chaîne de caractères avec ou sans motif(s) de sélection. Chaque champ de la ligne est stocké à la lecture dans une variable. Pour accéder à un champ particulier, il faut donc lire la variable correspondante. Ce sont les variables $1 pour le premier champ, $2 pour le deuxième et ainsi de suite jusques $99, qui est le maximum autorisé. A noter que pour accéder à l'ensemble des champs on utilisera la variable $0. Par exemple, l'affectation de '2' au troisième champ d'une ligne deviendra :

$3 = '2'

Parlons maintenant plus en détails de la syntaxe du langage. Comme je vous l'ai dit, l'élément de base du langage est la séquence motif/actions. Il est toutefois possible de se passer de l'un de ces deux éléments : s'il n'y a pas de motif, on effectue l'action sur toutes les lignes du fichier, et s'il n'y a pas d'action, GAwk se contente d'écrire la ligne complète sur la sortie standard.

Une action au sens de GAwk est une suite d'instructions régies par les mêmes règles syntaxiques que le C. Voici un détail des principaux ordres de GAwk.

GAwk

Les variables

Pour être complet sur la description de GAwk, il nous faut voir maintenant les variables et la manière dont elles sont gérées.

Les variables de GAwk sont purement dynamiques. C'est-à-dire qu'elles n'existent qu'à partir de leur première assignation. Elles ne sont pas non plus typées dans le sens ou elle prennent le type de ce qu'on leur affecte. Les valeurs qu'elles contiennent peuvent être réelles, entières ou de type chaîne de caractères. GAwk gère les tableaux unidimensionnels seulement, mais il est très simple de simuler plusieurs dimensions par un habile décalage d'indice. GAwk possède également bon nombre de variables réservées qu'il initialise et assigne dynamiquement de manière transparente pour l'utilisateur. Passons en revue quelques-unes de ces variables réservées du langage qui, vous allez pouvoir en juger, sont très utiles :
  • FS : caractère indiquant la séparation de deux champs, par défaut il s'agit du caractère "Espace".
  • NF : nombre de champs dans la ligne courante (abréviation anglaise de Number of Fields).
  • NR : numéro de la ligne courante (abréviation anglaise de Number of Records).
  • FNR : numéro de la ligne courante dans le fichier courant.
Petits exemples simples

Pour terminer cette étude du langage GAwk, nous allons voir quelques exemples des fonctionnalités et de la puissance de traitement du langage.

Exemple 1 : ce premier exemple va permettre la visualisation de toutes les lignes d'un fichier nommé toto, dont la taille est supérieure à 72 caractères. Cet exemple est des plus simples et ne nécessite même pas d'écrire un programme complet ; on passera directement la commande sous la forme :

GAwk 'length > 72' toto

La fonction "length", lorsqu'elle ne possède pas de paramètres, renvoie la longueur de la ligne d'entrée.

Exemple 2 : cette fois on complique un peu. Nous allons visualiser toutes les lignes du fichier "toto" comprises entre deux mots-clefs "start" et "stop". La commande à envoyer à GAwk pour faire le traitement est donc la suivante :

GAwk '/start/, /stop/' toto

L'indication d'une chaîne de caractères se fait en la limitant par deux barres obliques.

Exemple 3 : nous allons maintenant réaliser notre premier vrai programme, que nous appellerons "somme.awk". Il traite un fichier "toto" en additionnant tous les nombres correspondant à la deuxième colonne de chaque ligne du fichier. Voici le fichier d'exemple :

GAwk

Le programme à réaliser est donc le suivant :

GAwk

La première action ajoute la valeur du second champ de chaque ligne à la variable somme. Le mot clé "END", situé avant la deuxième action, indique qu'elle ne devra être exécutée qu'après que toutes les lignes de tous les fichiers d'entrée aient été traitées par la première. Enfin, "NR" est la variable réservée contenant le nombre total de lignes lues.

Exemple 4 : pour notre dernier exemple, nous allons inverser les colonnes du fichier "toto", c'est-à-dire inverser les champs de chaque ligne. Le programme est très simple, le voici :

awk '{print $3, $2, $1 }' titi

Voilà pour les exemples, il ne nous reste plus qu'à savoir où trouver le logiciel.

Où trouver GAWK ?

GAwk est disponible, vous vous en doutez bien, dans le domaine public. La version que j'ai testée se trouve sur la disquette Fish numéro 406. Outre le programme proprement dit, vous trouverez également une documentation (en anglais) dans le plus pur style "man" d'Unix, ainsi qu'un certain nombre de fichiers textes expliquant le travail des auteurs. Pour ceux qui voudraient en savoir plus sur Awk, je vous conseille la "bible" de ce langage : The Awk Programming Language, écrit par les trois auteurs d'Awk eux-mêmes et édité par Bell Telephone Laboratories, Incorporated.

En conclusion, je vous recommande fortement d'étudier ce petit langage de traitement de fichiers ASCII qu'est GAwk.


[Retour en haut] / [Retour aux articles]