Quoi de neuf avec Awk ?
Brian Kernighan discute de l'outil de script Awk, de sa création aux travaux actuels sur le support Unicode.
Awk est un puissant outil de script qui facilite le traitement du texte. Les scripts Awk utilisent une syntaxe pattern-action, où Awk effectue une action pour chaque ligne d'un fichier qui correspond à un modèle. Cela fournit un langage de script flexible mais puissant pour gérer le texte. Par exemple, le script Awk sur une ligne /error/ {print $1, $2, $3}
imprimera les trois premiers champs délimités par des espaces pour toute ligne contenant le mot error
.
Bien que nous ayons également la variante GNU d'Awk, appelée Gawk, l'Awk original reste en cours de développement. Récemment, Brian Kernighan a lancé un projet visant à ajouter le support Unicode à Awk. J'ai rencontré Brian pour lui poser des questions sur les origines d'Awk et son récent travail de développement sur Awk.
Jim Hall : Awk est un excellent outil pour analyser et traiter du texte. Comment ça a commencé ?
Brian Kernighan : L'influence la plus directe a été un outil que Marc Rochkind a développé alors qu'il travaillait sur le système Programmer's Workbench aux Bell Labs. Si je me souviens bien, le programme de Marc a pris une liste d'expressions régulières et a créé un programme C qui lirait un fichier d'entrée. Chaque fois que le programme trouvait une correspondance pour l'une des expressions régulières, il imprimait la ligne correspondante. Il a été conçu pour créer une vérification des erreurs afin d'exécuter des fichiers journaux à partir des données d'opérations téléphoniques. C'était une idée vraiment géniale : Awk n'est qu'une généralisation.
Jim : AWK représente vous trois qui l'avez créé : Al Aho, Peter Weinberger et Brian Kernighan. Comment avez-vous tous les trois conçu et créé Awk ?
Brian : Al était intéressé par les expressions régulières et avait récemment implémenté egrep, qui fournissait une technique d'évaluation paresseuse très efficace pour une classe d'expressions régulières beaucoup plus grande que ce que grep fournissait. Cela nous a donné une syntaxe et un code fonctionnel.
Peter s'était intéressé aux bases de données et, dans ce cadre, à la génération de rapports, comme le langage RPG fourni par IBM. Et j'avais essayé de trouver une sorte de système d'édition permettant de gérer les chaînes et les nombres avec plus ou moins la même facilité.
Nous avons exploré des designs, mais pas pendant longtemps. Je pense qu'Al a peut-être fourni le paradigme modèle-action de base, mais cela était implicite dans une variété d'outils existants, comme grep, l'éditeur de flux sed, et dans les outils linguistiques YACC et Lex que nous avons utilisés pour l'implémentation. Naturellement, le langage d’action devait être de type C.
Jim : Comment Awk a-t-il été utilisé pour la première fois aux Bell Labs ? Quand Awk a-t-il été adopté pour la première fois sous Unix ?
Brian : Awk a été créé en 1977, il faisait donc partie de la 7e édition d'Unix, qui, je pense, est apparue vers 1979. Je ne dirais pas qu'il a été adopté, dans la mesure où il s'agissait simplement d'un autre programme. inclus parce qu'il était là. Les gens l'ont adopté très rapidement et nous avons rapidement eu des utilisateurs dans tous les laboratoires. Les gens ont également écrit des programmes bien plus importants que ce que nous avions imaginé, même des dizaines de milliers de lignes, ce qui était incroyable. Mais pour certains types d’applications, le langage convenait bien.
Jim : Awk a-t-il changé au fil des années, ou Awk est-il aujourd'hui plus ou moins le même Awk de 1977 ?
Brian : Dans l'ensemble, cela a été assez stable, mais il y a eu un bon nombre de petites choses, principalement pour suivre au moins les parties principales de Gawk. Les exemples incluent des éléments tels que des fonctions pour effectuer la conversion de casse, des raccourcis pour certains types d'expressions régulières ou des noms de fichiers spéciaux comme /dev/stderr
. En interne, beaucoup de travail a été réalisé pour remplacer les tableaux de taille fixe par des tableaux qui grandissent. Arnold Robbins, qui gère Gawk, a également été incroyablement utile avec Awk, en fournissant de bons conseils, des tests, du code et de l'aide avec Git.
Jim : Vous ajoutez actuellement la prise en charge d'Unicode à Awk. C'est l'un de ces projets qui semble évident quand on l'entend, car Unicode est partout, mais tous les programmes ne le prennent pas encore en charge. Parlez-nous de votre projet pour ajouter Unicode à Awk.
Brian : C'est un peu embarrassant depuis un moment maintenant qu'Awk ne gère que les entrées 8 bits, même si, en toute honnêteté, il est antérieur à Unicode de 10 ou 20 ans. Gawk, la version GNU, gère correctement Unicode depuis un certain temps, il est donc bon d'être à jour et compatible.
Jim : Quelle est la taille d'un projet en ajoutant le support Unicode ? Cela a-t-il nécessité de nombreuses modifications du code source ?
Brian : Je n'ai pas compté, mais il s'agit probablement de 200 ou 300 lignes, principalement concentrées soit dans le module de reconnaissance d'expressions régulières, soit dans les diverses fonctions intégrées qui doivent fonctionner en caractères, et non en octets, pour Entrée Unicode.
Jim : Où en êtes-vous dans l'ajout d'Unicode à Awk ?
Brian : Il existe une branche du code sur GitHub qui est assez à jour. Cela a été testé, mais il est toujours possible d’en faire davantage.
Une chose à mentionner : il gère les entrées et sorties UTF-8, mais pour les points de code Unicode, qui ne sont pas la même chose que les graphèmes Unicode. Cette distinction est importante mais techniquement très compliquée, du moins si je comprends bien. À titre d'exemple simple, une lettre avec un accent pourrait être représentée par deux points de code (lettre et accent) ou par un seul caractère (graphème). Faire cela correctement, quoi que cela signifie, est très difficile.
Jim : Dans une vidéo Computerphile, vous mentionnez l'ajout de la prise en charge de l'analyse de valeurs séparées par des virgules (CSV) à Awk. Comment se déroule ce projet ?
Brian : Pendant que j'avais à nouveau les mains dans le code, j'ai ajouté la prise en charge de la saisie CSV, car c'est un autre élément du langage qui a toujours été maladroit. Je n'ai rien fait pour la sortie CSV, car c'est facile à faire avec quelques fonctions courtes, mais cela devrait peut-être être revu.
Jim : Pour quels types de choses utilisez-vous Awk dans votre travail quotidien ?
Brian : Tout. Presque tout ce qui manipule du texte est une cible pour Awk. Certes, le programme Awk que j'utilise le plus est simple et permet de donner à toutes les lignes d'un document texte la même longueur. Je l'ai probablement utilisé 100 fois en écrivant des réponses à vos questions.
Jim : Quelle est la chose la plus cool (ou la plus inhabituelle) pour laquelle vous avez utilisé Awk ?
Brian : Il y a longtemps, j'ai écrit un programme C++ qui convertissait les programmes Awk en C++ aussi proches que possible d'Awk, en faisant des choses comme surcharger les crochets pour les tableaux associatifs. Cela n’a jamais été utilisé, mais c’était un exercice amusant.
Lectures complémentaires
- Aide-mémoire Awk
- Un guide pratique pour apprendre Awk (eBook)