120 votes

Y a-t-il encore une raison d'apprendre AWK?

Je suis constamment en train d'apprendre de nouveaux outils, même les plus anciens, car j'aime utiliser la bonne solution pour le problème.

Cependant, je me demande s'il y a encore une raison d'apprendre certains d'entre eux. awk par exemple m'intéresse, mais pour un simple traitement de texte, je peux utiliser grep, cut, sed, etc. tandis que pour des tâches complexes, je choisirai Python.

Maintenant je ne veux pas dire que ce n'est pas un outil puissant et pratique. Mais étant donné que cela prend du temps et de l'énergie pour apprendre un nouvel outil, est-ce que ça vaut le coup ?

4 votes

C'est 2019 et je viens de réécrire un normaliseur de logs python en awk. J'ai exécuté la transformation sur une semaine de fichiers journaux qui comportaient 54 millions de lignes (~9 Go). Sur mon Macbook Pro (2,8 GHz i7, 16 Go de Ram), la version python pouvait traiter ~10k lignes par seconde => 90 minutes de temps d'exécution. En utilisant mawk, le temps d'exécution s'est réduit à 2 minutes. Au fait, le programme awk était deux fois plus petit.

0 votes

@misterhenry avez-vous essayé pypy ?

116voto

Brandon Rhodes Points 21188

Si vous apprenez rapidement les bases d'awk, vous pouvez vraiment faire des choses incroyables en ligne de commande.

Mais la vraie raison d'apprendre awk est d'avoir une excuse pour lire le superbe livre The AWK Programming Language par Aho, Kernighan et Weinberger.

The AWK Programming Language sur archive.org

Vous pourriez penser, d'après le nom, qu'il vous apprend simplement awk. En réalité, ce n'est que le début. Se lançant dans la vaste gamme de problèmes pouvant être abordés une fois que l'on utilise un langage de script concis qui facilite la manipulation de chaînes de caractères - et awk était l'un des premiers - il enseigne au lecteur comment implémenter une base de données, un analyseur, un interprète et (si ma mémoire est bonne) un compilateur pour un langage informatique spécifique à un projet! Si seulement ils avaient également programmé un système d'exploitation exemple en utilisant awk, le livre aurait été une introduction assez complète à l'informatique!

Célèbre pour sa clarté et sa concision, comme le livre original sur le langage C, c'est en outre un merveilleux exemple d'écriture technique conviviale bien réalisée. Même l'index est une pièce d'artisanat.

Awk? Si vous le connaissez, vous l'utiliserez occasionnellement en ligne de commande, mais pour tout ce qui est plus important, vous vous sentirez piégé, incapable d'accéder aux fonctionnalités plus étendues de votre système et d'Internet auxquelles un langage comme Python donne accès. Mais le livre? Vous serez toujours content de l'avoir lu!

5 votes

+1 Vendu. Je vais commander ce livre. J'utilise awk depuis des années comme un langage de script rapide et puissant en une ligne. Awk est un excellent pré-processeur de fichiers qui, autrement, demanderaient une douzaine de lignes de code. Je ne peux pas compter combien de fois j'ai utilisé la forme : awk '{print $1, $2}'

2 votes

D'accord. Il est presque incroyable de voir à quel point ce livre est compact compte tenu de tout ce qu'il contient. Il couvre plus que la plupart des livres contemporains en 1/10 (?) de la longueur.

3 votes

Je suis en train de lire ce livre maintenant et il a enflammé mon enthousiasme pour awk à une obsession presque.

104voto

freespace Points 9024

Je pense que cela dépend de l'environnement dans lequel vous vous trouvez. Si vous êtes un utilisateur de *nix, alors savoir faire fonctionner awk est une bonne chose. Le seul autre environnement de script que l'on peut trouver sur pratiquement tous les *nix est sh. Donc, bien que grep, sed, etc. puissent certainement remplacer awk sur une distribution linux moderne grand public, lorsque vous passez à des systèmes plus exotiques, savoir un peu de awk sera vraiment utile.

awk peut également être utilisé pour autre chose que le traitement de texte. Par exemple, l'un de mes superviseurs écrit du code d'astronomie en awk - c'est ainsi qu'il est tellement old school et impressionnant. À l'époque, c'était le meilleur outil pour le travail... et maintenant, même si ses étudiants comme moi utilisent python et tout ce qui est plus moderne, il reste fidèle à ce qu'il connaît et qui fonctionne bien.

Pour conclure, il y a beaucoup de vieux codes qui traînent dans le monde, savoir un peu de awk ne fera pas de mal. Cela fera également de vous un meilleur utilisateur de *nix :-)

12 votes

++ D'accord, awk est vraiment l'un des outils les plus portables et, surtout, cohérents dans la trousse à outils *nix. Il fonctionne de manière fiable sur busybox, par exemple, où perl est introuvable.

1 votes

Et ce n'est vraiment pas si difficile à apprendre non plus si vous êtes habitué aux langages entre accolades

0 votes

C'est la même chose dans n'importe quel environnement, contrairement à Regex qui a une syntaxe différente dans chaque programme (et deux syntaxes très différentes dans Visual C# Studio) ...

30voto

Greg Hewgill Points 356191

La seule raison pour laquelle j'utilise awk est la division automatique :

awk '{print $3}' < file.in

Cela affiche le troisième champ délimité par des espaces dans file.in. C'est un peu plus facile que :

tr -s ' ' < file.in | cut -d' ' -f3

3 votes

Pourquoi utiliser awk '{print $3}' < file.in au lieu de awk '{print $3}' file.in ? Est-ce que awk lit déjà les fichiers lorsqu'ils sont passés en arguments ?

0 votes

@mbigras Bien sûr, vous pouvez utiliser awk de toute façon.

0 votes

Même avec doublesize, j'aime la solution non-awkward. Et je ne sais pas pourquoi je déteste awk :/

25voto

Nikhil Points 978

Je pense que awk est génial si votre fichier contient des colonnes/champs. Je l'utilise lorsque je traite/analyse une colonne particulière dans un fichier multicolumn. Ou si je veux ajouter/supprimer une ou plusieurs colonnes spécifiques.

par exemple

awk -F \t '{ if ($2 > $3) print; }' 

ne va imprimer que si la valeur de la 2ème colonne dans un fichier séparé par des tabulations est supérieure à la valeur de la 3ème colonne.

Bien sûr, je pourrais utiliser Perl ou Python, mais awk rend les choses tellement plus simples avec une commande concise en une seule ligne.

Apprendre awk est également peu coûteux. Vous pouvez apprendre les bases d'awk en moins d'une heure, ce n'est donc pas aussi difficile que d'apprendre un autre langage de programmation/script.

0 votes

Bien que je n'utilise pas vraiment awk, c'est une excellente utilisation d'awk.

8voto

Eevee Points 18333

J'utilise awk de temps en temps. C'est bon pour déplacer très simplement du texte au milieu d'un pipeline; il remplit un créneau très étroit entre ne pas en avoir besoin du tout et avoir besoin d'utiliser Perl/Python/autre.

Je ne vous conseillerais pas de passer beaucoup de temps dessus, mais cela pourrait être utile de connaître les bases de la syntaxe - au moins assez pour consulter rapidement le manuel si jamais vous voulez l'utiliser.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X