Question

J'apprends sans cesse de nouveaux outils, même anciens, parce que j'aime utiliser la bonne solution au problème.

Néanmoins, je me demande s’il ya encore des raisons d’en apprendre quelques-unes awk par exemple m'intéresse, mais pour un traitement de texte simple, je peux utiliser grep , couper , sed , etc. alors que pour les plus complexes, je choisirai Python.

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

Était-ce utile?

La solution

Je pense que cela dépend de l'environnement dans lequel vous vous trouvez. Si vous êtes une personne * nix, alors connaître awk est une bonne chose. sh est le seul autre environnement de script que l’on puisse trouver sur pratiquement tous les * nix. Ainsi, alors que grep , sed, , etc. peuvent sûrement remplacer awk sur une distribution linux classique moderne, lorsque vous passez à systèmes plus exotiques, en sachant un peu awk va être Real Handy.

awk peut également être utilisé pour autre chose que le traitement de texte. Par exemple, l’un de mes superviseurs écrit le code astronomique dans awk - c’est à quel point il est old school et génial . À 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: -)

Autres conseils

Si vous apprenez rapidement les bases de 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 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 en utilisant awk, le livre aurait été une introduction assez complète à l’informatique;

Clairement célèbre et concis, comme le livre original en langage C, c’est aussi un merveilleux exemple d’écriture technique amicale bien faite. Même l’index est un travail d’art.

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 un accès. Mais le livre? Vous serez toujours content de le lire!

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

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

Ceci imprime le troisième champ délimité par des espaces dans fichier.in . C'est un peu plus facile que:

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

Je pense que awk est utile si votre fichier contient des 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>

sera imprimé uniquement 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 beaucoup plus simple avec une commande concise sur une seule ligne.

Apprendre aussi awk est très peu coûteux. Vous pouvez apprendre les bases de awk en moins d’une heure. C’est donc moins d’effort que d’apprendre un autre langage de programmation / script.

J'utilise parfois AWK pour traiter le code 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 :) plus d'exemples . Il est également mentionné dans la jolie Programmation de perles de Jon Bentley.

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 fouetter Perl / Python / peu importe.

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

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 conservez des scripts shell écrits par quelqu'un qui aime awk, il est clair que vous devrez apprendre awk.

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

Si vous connaissez déjà et utilisez sed, profitez-en au moins un peu. Ils peuvent être combinés pour quelques trucs assez puissants. Impressionne toujours le public.

6 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 ne sont gérées que par des commandes bash, voire des outils d'interface graphique. 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.

Computerworld a récemment réalisé une interview avec Alfred V. Aho (un des trois créateurs d’AWK) à propos d’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.

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

Cela est utile surtout si vous devez analyser occasionnellement des fichiers journaux pour les données ou la sortie de programmes lors de scripts shell, car il est très facile de comprendre avec awk que cela vous prendrait un peu plus de lignes de code en python.

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

Bien sûr: je travaille dans un environnement où les seules langues disponibles sont: (certaines langues shity générant 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 de gagner plusieurs heures (et d'avoir généré plusieurs tâches de traitement de texte à partir de mes collègues - elles me parviennent au moins trois fois par jour).

awk a un très bon rapport utilité / difficulté, et "simple awk". fonctionne dans tous les systèmes Unix / Linux / MacOS (et peut également être installé sur 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, qui accélèrerait le calcul environ 9 fois, awk / gawk est plutôt lente, donc si vous voulez l’utiliser à la place de R, vous pouvez vouloir mawk.

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 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

Nope.

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 faites que fortuitement.

Je dirais qu'il y en a. Pour des choses simples, AWK est beaucoup plus facile pour un administrateur système / développeur peu expé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: -)

Maintenant que PERL est transféré sur à peu près toutes les plates-formes importantes, je dirais que cela n'en vaut pas la peine. C'est plus polyvalent que sed et awk ensemble. Pour ce qui est du fractionnement automatique, vous pouvez le faire en Perl comme ceci:

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

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

Je travaille dans la zone où les fichiers sont en 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 & amp; unix pour canaliser plusieurs commandes 1 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". ouvrir un fichier. Je dois dire que la capacité de awk a apporté de la joie à mon travail, en particulier, je suis en mesure d'aider un collègue à régler rapidement les problèmes en utilisant awk. Code incroyable pour moi.

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, une ligne AWK a également fonctionné à merveille et assez rapidement. J'ai spécifiquement utilisé AWK pour nettoyer les fichiers extraits, obtenir les adresses ip et le nombre total de paquets à partir de ces adresses IP sur une période de temps groupée. Je suis totalement d'accord avec ce que d'autres personnes ont écrit ci-dessus. Cela dépend de vos besoins.

awk est un langage powertool, 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 de sed , vous ne devriez avoir aucun problème à choisir awk et cela en vaut probablement la peine.

Où j'ai trouvé awk , c’est vraiment simplifier des choses comme le traitement d’enregistrements multilignes et la modification / interpolation simultanée de plusieurs fichiers.

Une des raisons pour ne pas apprendre awk est qu’il n’ya pas de correspondance non-gloutonne 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'existait pas de correspondances non-gloutonnes dans awk / gawk, de sorte qu'il ne pouvait pas exécuter correctement certaines expressions rationnelles.

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
  }
}

Je fais du codage en python à l’heure actuelle. Mais je ne le connais toujours pas assez 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 code que j'écris sera jetable et ne dépassera pas quelques lignes. Peut-être un & if; if " déclaration et " printf " déclaration ici ou là sur la ligne.

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

Mais pour tout ce qui nécessitait de nombreuses lignes de code, je recourrais à python.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top