web-dev-qa-db-fra.com

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

J'apprends constamment de nouveaux outils, même les plus anciens, car j'aime utiliser la bonne solution au problème.

Néanmoins, je me demande s’il existe encore des raisons d’en apprendre quelques-unes. awk par exemple m'intéresse, mais pour le traitement de texte simple, je peux utiliser grep, cut, sed, etc.

Maintenant, je ne veux pas dire que ce n’est pas un outil puissant et pratique. Mais puisqu'il faut du temps et de l'énergie pour apprendre un nouvel outil, en vaut-il la peine?

93
e-satis

Je pense que cela dépend de l'environnement dans lequel vous vous trouvez. Si vous êtes une personne * nix, savoir que awk est une bonne chose. sh est le seul environnement de script existant sur pratiquement tous les * nix. Ainsi, bien que grep, sed, etc., remplace sûrement awk sur une distribution linux moderne, lorsque vous passez à des systèmes plus exotiques, sachant qu'un peu awk sera vraiment pratique.

awk peut également être utilisé pour plus que le traitement de texte. Par exemple, l'un de mes superviseurs écrit le code d'astronomie dans awk - voilà comment il se trouve old school et awesome. À son époque, c'était le meilleur outil pour le travail ... et maintenant, même si ses étudiants comme moi utilisent du python et ce qui ne l'est pas, il s'en tient à ce qu'il sait et fonctionne bien. 

En conclusion, il y a beaucoup d'anciens codes malmenés dans le monde entier, sachant qu'un petit awk ne fera pas mal. Cela vous fera également mieux * personne nix :-)

89
freespace

Si vous apprenez rapidement les bases de awk, vous pouvez en effet 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 Le langage de programmation AWK de ses auteurs Aho, Kernighan et Weinberger. Vous pourriez penser, à partir de son nom, que cela vous apprend simplement awk. En fait, ce n’est que le début. Nous abordons le vaste éventail de problèmes qui peuvent être résolus une fois que l’on utilise un langage de script concis qui facilite la manipulation des chaînes - et awk en est l’un des premiers - il enseigne au lecteur comment implémenter une base de données, un analyseur syntaxique, un interprète et (si ma mémoire est bonne) un compilateur pour un petit langage informatique spécifique à un projet! Si seulement ils avaient également programmé un exemple de système d'exploitation utilisant awk, le livre aurait été une introduction assez complète à l'enquête en informatique!

Célèbre pour sa clarté et sa concision, comme le livre original en langage C, c’est aussi un merveilleux exemple d’écriture technique amicale bien faite. Même l'index est une pièce d'artisanat.

Awk? Si vous le connaissez, vous l'utiliserez occasionnellement sur la ligne de commande, mais pour tout ce qui est plus grand, vous vous sentirez pris au piège, incapable d'accéder aux fonctionnalités plus larges de votre système et d'Internet auxquelles quelque chose comme Python fournit l'accès. Mais le livre? Vous serez toujours content de le lire!

89
Brandon Rhodes

La seule raison pour laquelle j'utilise awk est le fractionnement automatique:

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

Ceci 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
27
Greg Hewgill

Je pense que awk est génial si votre fichier contient colonnes/champs . Je l'utilise lors du traitement/de l'analyse d'une colonne particulière dans un fichier multicolonne. Ou si je veux ajouter/supprimer une colonne particulière. 

par exemple.

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

n’est imprimé que si la valeur de la 2e colonne d’un fichier séparé par une tabulation est supérieure à la valeur de la 3e colonne.

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

De plus, apprendre awk est très peu coûteux. Vous pouvez apprendre les bases de awk en moins d'une heure. Vous ne devez donc pas demander autant d'efforts que d'apprendre un autre langage de programmation/script.

22
Nikhil

J'utilise parfois AWK pour traiter avec HTML. Par exemple, ce code traduit les tables en fichiers csv:

BEGIN {s=""; FS="n"}
/<td/ { gsub(/<[^>]*>/, ""); s=(s ", " $1);}
/<tr|<TR/ { print s; s="" }

Ce qui est génial si vous grattez l'écran. En fait, il se peut que j'aime AWK car cela me permet de construire aussi rapidement la mauvaise solution à un problème :) plusieurs exemples . Il est également mentionné dans le très joli livre de Jon Bentley Programming Pearls .

7
Dave

J'utilise awk de temps en temps. C'est bien pour un simple remaniement de texte au milieu d'un pipeline; cela remplit un créneau très étroit entre ne pas en avoir besoin du tout et avoir besoin de sortir Perl/Python/peu importe.

Je ne vous conseillerais pas de passer beaucoup de temps là-dessus, mais il serait peut-être utile de connaître les bases de la syntaxe - au moins suffisamment pour pouvoir consulter le manuel rapidement si vous le souhaitez.

5
Eevee

La plupart des doublures awk one peuvent être réalisées avec les doublures Perl one - si vous choisissez de vous lancer dans un état d'esprit Perl one Liner. Ou bien, utilisez simplement Perl trois liners :)

Si vous maintenez des scripts Shell écrits par quelqu'un qui a aimé awk, il est clair que vous allez devoir apprendre awk.

Même s'il n'y a aucun besoin pratique, si vous connaissez déjà regex, il ne vous faudra pas longtemps pour apprendre les bases, et c'est amusant de voir comment les choses ont été conçues à l'époque. C'est plutôt élégant.

5
slim

Si vous connaissez déjà et utilisez sed, vous pouvez tout aussi bien en prendre au moins un peu. Ils peuvent être combinés pour quelques astuces assez puissantes. Impressionne toujours le public.

4
Internet Friend

Computerworld a récemment fait une interview avec Alfred V. Aho (l'un des trois créateurs d'AWK) sur AWK. C'est une lecture assez intéressante. Alors peut-être y trouverez-vous des allusions, pourquoi c'est une bonne idée d'apprendre AWK.

3
dlat

Apprendre AWK a été une aide précieuse pour moi dans mon dernier contrat de travail sur un système Linux intégré sur lequel ni Perl ni la plupart des autres langages de script n’étaient installés.

3
George Jempty

Six ans après avoir posé cette question, je peux maintenant répondre avec certitude: non, apprendre awk n'en vaut pas la peine.

Les tâches de base sont manipulées mais les commandes bash de base, voire les outils d’interface graphique facilement. Des tâches plus complexes seront facilement abordées avec des langages dynamiques modernes tels que Python (fav ou le mien) ou Ruby.

Vous devriez définitivement apprendre un langage dynamique de script mordern, car il vous aidera dans de nombreuses tâches (web, administrateur, traitement des données, automatisation, etc.). Et ainsi, apprendre un outil tel que awk est totalement inutile, il vous fera gagner au mieux quelques secondes par mois.

3
e-satis

awk a un très bon rapport utilitaire/difficulté, et "simple awk" fonctionne dans tous les systèmes Unix/Linux/MacOS (et il peut également être installé dans d'autres systèmes).

Il a été conçu à l'âge d'or quand les gens détestaient taper, les scripts peuvent donc être très, très courts et rapides à écrire. Je vais essayer d’installer mawk, une version rapide, ce qui accélèrerait le calcul environ 9 fois, awk/gawk est plutôt lent, donc si vous voulez l’utiliser à la place de R, etc., vous voudrez peut-être mawk.

2
BongBong Chu

C'est utile surtout si vous devez analyser occasionnellement des fichiers journaux pour les données ou la sortie de programmes lors de l'écriture de scripts dans Shell, car il est très facile de réaliser avec awk que cela vous prendrait un peu plus de lignes de code en python.

Il a certainement plus de pouvoir que cela, mais cela semble être une tâche pour laquelle la plupart des gens l’utilisent.

2
NeuroSys

Bien sûr: je travaille dans un environnement où les seules langues disponibles sont: (une langue shity qui génère du COBOL, OMG, OMG), bash (ancienne version), Perl (je ne le maîtrise pas encore), sed, awk et quelques autres utilitaires de ligne de commande. Connaître awk m'a permis d'économiser plusieurs heures (et avait généré plusieurs tâches de traitement de texte de mes collègues, qui me venaient au moins trois fois par jour). 

2
Zsolt Botykai

Je dirais que ça n'en vaut probablement plus la peine. Je l'utilise de temps en temps en tant qu'éditeur de flux bien plus polyvalent que sed avec des capacités de recherche incluses, mais si vous maîtrisez le langage python, je ne connais pas une tâche que vous seriez capable de terminer beaucoup plus rapidement pour compenser le temps nécessaire. apprendre awk.

La commande suivante est probablement la seule pour laquelle j'ai utilisé awk au cours des deux dernières années (elle purge les paquets à moitié supprimés de mes systèmes Debian/Ubuntu):

$ dpkg -l|awk '/^rc/ {print $2}'|xargs Sudo dpkg -P
1
Matthias Kestenholz

Nan.

Même si cela peut être intéressant, vous pouvez faire tout ce que awk peut faire en utilisant d’autres outils plus puissants tels que Perl.

Passez votre temps à apprendre ces outils plus puissants - et ne vous en rendrez compte que par hasard.

1
Ed Guiness

Je dirais qu'il y a. Pour des choses simples, AWK est beaucoup plus facile pour un administrateur système/développeur inexpérimenté que Python. Vous pouvez apprendre un peu AWK et faire beaucoup de choses, apprendre Python signifie apprendre une toute nouvelle langue (oui, je sais que AWK est une langue, c'est aussi un sens).

Perl pourrait peut-être faire beaucoup de choses qu'AWK peut faire, mais en offrant le choix de nos jours, je choisirais Python ici. Alors oui, vous devriez apprendre AWK. mais apprenez aussi Python :-)

1
wzzrd

Maintenant que Perl est porté sur pratiquement toutes les plates-formes significatives, je dirais que cela n'en vaut pas la peine. C'est plus polyvalent que sed et awk ensemble. En ce qui concerne l'auto-fractionnement, vous pouvez le faire en Perl comme ceci:

Perl -F':' -ane 'print $F[3],"\n";' /etc/passwd

EDIT: vous voudrez peut-être toujours apprendre un peu avec awk, car certains autres outils sont basés sur sa philosophie des actions basées sur des modèles (par exemple, DTrace sur Solaris).

0
zvrba

Je travaille dans la zone les fichiers sont en format colonne. Donc, awk m’est inestimable pour REFORMAT le fichier afin que différents logiciels puissent fonctionner ensemble. Pour les non informaticiens, utiliser awk est suffisant et parfait. Maintenant, un jour, la vitesse de l'ordinateur n'est pas un problème, je peux donc combiner awk & unix pour diriger plusieurs commandes de liners dans un "script". Avec Awk recherche par champ et enregistrement, je l’utilise pour vérifier très rapidement les données du fichier, au lieu de "vi" pour ouvrir un fichier. Je dois dire que la capacité de awk a apporté de la joie à mon travail, en particulier, je peux aider un collègue à régler rapidement les problèmes en utilisant awk. Code incroyable pour moi.

0
Hai Truong

awk est un langage d’outil graphique, vous allez donc probablement trouver awk utilisé quelque part si vous êtes un professionnel de l’informatique. Si vous pouvez gérer la syntaxe et les expressions régulières de grep et sed, vous ne devriez pas avoir de problème à choisir awk et cela vaut probablement la peine. 

J'ai trouvé awk vraiment brillant, c'est de simplifier des tâches telles que le traitement d'enregistrements sur plusieurs lignes et la modification/interpolation simultanée de plusieurs fichiers. 

0
user4401178

J'essayais récemment de visualiser des fichiers pcap en réseau enregistrant une attaque DOS dépassant 20 Go. J'avais besoin de l'horodatage et des adresses IP. Dans mon scénario,AWKone-liner a également fonctionné à merveille et assez rapidement. J'ai spécifiquement utiliséAWKpour nettoyer les fichiers extraits, obtenir les adresses IP et le nombre total de paquets à partir de ces adresses IP au cours d'une période groupée. Je suis totalement d'accord avec ce que d'autres personnes ont écrit ci-dessus. Cela dépend de vos besoins.

0
Ayush

Je fais du codage en python pour le moment. Mais je ne le connais toujours pas assez bien pour pouvoir l'utiliser facilement pour de simples transformations de fichiers uniques.

Avec awk, je peux rapidement développer un code d'une ligne sur la ligne de commande unix qui effectue de jolies transformations en swish. Chaque fois que j'utilise awk, le morceau de code que j'écris sera jetable et ne dépassera pas quelques lignes. Peut-être une déclaration "if" et une déclaration "printf" ici ou là sur une ligne. 

Je n'ai jamais écrit un morceau de code de plus de 10 lignes avec awk ..__ J'ai vu de tels scripts il y a des années. 

Mais tout ce qui nécessitait de nombreuses lignes de code, je voudrais recourir à Python.

J'aime awk. C'est un outil très puissant associé à sed. 

0
user5901715

Une des raisons pour ne pas apprendre awk est qu’il n’ya pas de correspondance non-gourmande dans les expressions régulières. 

J'ai un code awk que je ne dois maintenant réécrire que parce que j'ai soudainement débogué qu'il n'y avait pas de correspondances non-gourmandes dans awk/gawk et qu'il ne pouvait donc pas exécuter correctement certaines expressions rationnelles.

0
user619271

Cela dépend de vos coéquipiers et de votre chef, ainsi que de la tâche sur laquelle vous travaillez.

if( team mates and leader ask to write awk ){
  if( you can reject that){
    if( awk code is very small){
      learn little just like learn Regex
    }else{
      use python or even Java
    }
  }else{
    do as they ask
  }
}
0
Kenneth