Quoi de neuf avec Awk ? | Opensource.com


  • Français


  • Awk est un puissant outil de script qui facilite le traitement du texte. Les scripts Awk utilisent un modèle-action syntaxe, 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 traiter le texte. Par exemple, le script Awk d’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 pour 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 cela a-t-il 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 m’en souviens maintenant, 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 a trouvé une correspondance pour l’une des expressions régulières, il a imprimé la ligne correspondante. Il a été conçu pour créer une vérification des erreurs à exécuter sur les fichiers journaux à partir des données d’opérations téléphoniques. C’était une idée tellement géniale – Awk n’est qu’une généralisation.

    Jim : AWK représente les trois d’entre vous qui l’ont créé : Al Aho, Peter Weinberger et Brian Kernighan. Comment avez-vous conçu et créé Awk à trois ?

    Brian : Al s’intéressait aux 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 celle fournie par grep. Cela nous a donné une syntaxe et un code fonctionnel.

    Peter s’était intéressé aux bases de données, et dans le cadre de cela, il avait un certain intérêt pour 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 qui permettait de gérer les chaînes et les nombres avec plus ou moins la même facilité.

    Nous avons exploré les designs, mais pas pendant longtemps. Je pense qu’Al a peut-être fourni le paradigme de base de l’action de modèle, mais cela était implicite dans une variété d’outils existants, comme grep, l’éditeur de flux sed, et dans les outils de langage YACC et Lex que nous avons utilisés pour la mise en œuvre. 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 dans 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é, tant c’était juste 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 écrivaient aussi des programmes beaucoup plus gros que nous ne l’avions jamais imaginé, même des dizaines de milliers de lignes, ce qui était incroyable. Mais pour certains types d’applications, la langue correspondait bien.

    Jim : Awk a-t-il changé au fil des ans, ou est-ce qu’aujourd’hui Awk est plus ou moins le même Awk qu’en 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 essentielles de Gawk. Les exemples incluent des choses comme des fonctions pour faire 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, il y a eu beaucoup de travail pour remplacer les baies de taille fixe par des baies qui grandissent. Arnold Robbins, qui maintient Gawk, a également été incroyablement utile avec Awk, 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 supportent pas encore. Parlez-nous de votre projet d’ajout d’Unicode à Awk.

    Brian : C’est un peu gênant depuis un certain temps maintenant qu’Awk ne gère que les entrées 8 bits, bien qu’en toute honnêteté, il soit 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 qui ajoute la prise en charge d’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 reconnaisseur d’expressions régulières, soit dans les diverses fonctions intégrées qui doivent fonctionner en caractères, et non en octets, pour l’entrée Unicode.

    Jim : Où en êtes-vous dans l’ajout d’Unicode à Awk ?

    Brian : Il y a une branche du code sur GitHub qui est assez à jour. Il a été testé, mais il y a toujours de la place pour d’autres tests.

    Une chose à mentionner : il gère l’entrée et la sortie 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 telle que je la comprends. À 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 un Vidéo informaticienne, vous mentionnez l’ajout de la prise en charge de l’analyse des valeurs séparées par des virgules (CSV) à Awk. Comment se passe ce projet ?

    Brian : Pendant que j’avais à nouveau les mains dans le code, j’ai ajouté la prise en charge de l’entrée CSV, car c’est une autre partie du langage qui était toujours maladroite. Je n’ai rien fait pour la sortie CSV, car c’est facile à faire avec quelques fonctions courtes, mais peut-être que cela devrait être revu.

    Jim : Pour quel genre de choses utilisez-vous Awk dans votre travail quotidien ?

    Brian : Tout. Pratiquement tout ce qui manipule du texte est une cible pour Awk. Certes, le programme Awk que j’utilise le plus est simple pour que toutes les lignes d’un document texte aient 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) que vous ayez utilisée avec Awk ?

    Brian : Il y a longtemps, j’ai écrit un programme C++ qui convertissait des programmes Awk en C++ qui ressemblaient le plus possible à Awk, en faisant des choses comme surcharger les crochets pour les tableaux associatifs. Il n’a jamais été utilisé, mais c’était un exercice amusant.

    Lectures complémentaires

    Source

    Houssen Moshinaly

    Pour contacter personnellement le taulier :

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

    Copy code