J'apprends constamment de nouveaux outils, même les plus démodés, car j'aime utiliser la bonne solution pour le problème.
Néanmoins, je me demande s'il y a encore une raison d'en apprendre certains. awk
par exemple est intéressant pour moi, mais pour le traitement de texte simple, je peux utiliser grep
, cut
, sed
, etc. tandis que pour les complexes, je vais pour 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 ?
awk
text-processing
e-satis
la source
la source
Réponses:
Je pense que cela dépend de l'environnement dans lequel vous vous trouvez. Si vous êtes une personne * nix, alors savoir
awk
est une bonne chose. Le seul autre environnement de script qui peut être trouvé sur pratiquement tous les * nix estsh
. Ainsi, alors quegrep
,sed,
etc. peut sûrement remplacerawk
sur unelinux
distribution traditionnelle moderne , lorsque vous passez à des systèmes plus exotiques, en savoir un peuawk
sera vraiment pratique.awk
peut également être utilisé pour plus que le traitement de texte. Par exemple, l'un de mes superviseurs écrit du code d'astronomieawk
- c'est à quel point il est complètement old school et génial . À son époque, c'était le meilleur outil pour le travail ... et maintenant, même si ses élèves comme moi utilisent python et autres, il s'en tient à ce qu'il sait et fonctionne bien.En conclusion, il y a beaucoup de vieux codes qui circulent dans le monde, sachant qu'un peu
awk
ne va pas faire de mal. Cela vous rendra également meilleur * personne nix :-)la source
Si vous apprenez rapidement les bases de awk, vous pouvez en effet faire des choses étonnantes sur la ligne de commande.
Mais la vraie raison d'apprendre awk est d'avoir une excuse pour lire le superbe livre The AWK Programming Language de ses auteurs Aho, Kernighan et Weinberger. On pourrait penser, d'après le nom, que cela vous apprend simplement à vous faire du mal. En fait, ce n'est que le début. Se lancer dans 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 a été l'un des premiers - il continue à apprendre 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 petit langage informatique spécifique au 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!
Célèbre, clair 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 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 grand, vous vous sentirez piégé, incapable d'accéder aux fonctionnalités plus larges de votre système et d'Internet auxquelles quelque chose comme Python donne accès. Mais le livre? Vous serez toujours heureux de l'avoir lu!
la source
La seule raison pour laquelle j'utilise
awk
est le fractionnement automatique:Cela imprime le troisième champ délimité par des espaces dans
file.in
. C'est un peu plus simple que:la source
awk '{print $3}' < file.in
au lieu deawk '{print $3}' file.in
? Awk ne lit-il pas déjà les fichiers lorsqu'ils sont passés en arguments?awk
: /Je pense que awk est génial si votre fichier contient des colonnes / champs . Je l'utilise lors du traitement / analyse d'une colonne particulière dans un fichier multicolonne. Ou si je souhaite ajouter / supprimer une ou plusieurs colonnes particulières.
par exemple
ne s'imprimera que si la valeur de la 2e colonne dans un fichier séparé par 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 sur une seule ligne.
L'apprentissage de awk est également assez peu coûteux. Vous pouvez apprendre les bases de awk en moins d'une heure, donc ce n'est pas autant d'effort que d'apprendre tout autre langage de programmation / script.
la source
J'utilise occasionnellement AWK pour traiter du HTML. Par exemple, ce code convertit les tables en fichiers csv:
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 la mauvaise solution aux problèmes si rapidement :) plus d'exemples . Il est également mentionné dans les jolies perles de programmation de Jon Bentley .
la source
J'utilise awk de temps en temps. C'est bon pour un mélange de texte très simple au milieu d'un pipeline; il 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 dessus, mais il pourrait être utile de connaître les bases de la syntaxe - au moins suffisamment pour que vous puissiez consulter le manuel rapidement si vous souhaitez l'utiliser.
la source
La plupart des doublures awk one peuvent être réalisées avec des doublures Perl one - si vous choisissez d'entrer dans un état d'esprit Perl one liner. Ou, utilisez simplement Perl trois lignes :)
Si vous maintenez des scripts shell écrits par quelqu'un qui aimait awk, alors clairement, vous allez devoir apprendre awk.
Même s'il n'y a pas besoin pratique, si vous connaissez déjà les regex, il ne faudra pas longtemps pour comprendre les bases, et c'est amusant de voir comment les choses ont été conçues à l'époque. C'est plutôt élégant.
la source
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 sont manipulées mais les commandes bash de base, ou même les outils GUI facilement. Des tâches plus complexes seront facilement abordées avec des langages dynamiques modernes tels que Python (fav ou mien) ou Ruby.
Vous devriez certainement apprendre un langage dynamique de script moderne car il vous aidera dans de nombreuses tâches (web, administration, analyse de données, automatisation, etc.). Et ce faisant, apprendre un outil comme awk est totalement inutile, cela vous fera gagner au mieux quelques secondes chaque mois.
la source
Si vous connaissez et utilisez déjà sed, vous pourriez aussi bien prendre au moins un peu de awk. Ils peuvent être combinés pour des trucs assez puissants. Impressionne toujours le public.
la source
Computerworld a récemment fait une interview avec Alfred V. Aho (l'un des trois créateurs d'AWK) à propos d'AWK. C'est une lecture assez intéressante. Alors peut-être que vous y trouverez des indices, pourquoi c'est une bonne idée d'apprendre AWK.
la source
L'apprentissage d'AWK a été inestimable 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.
la source
awk a un très bon rapport utilité / difficulté, et "simple awk" fonctionne dans tous les Unix / Linux / MacOS (et il peut être installé dans d'autres systèmes aussi).
Il a été conçu à l'âge d'or quand les gens détestaient taper, donc les scripts peuvent être très, très courts et rapides à écrire. Je vais essayer d'installer mawk, une version rapide, prétendument qu'elle accélère 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.
la source
C'est surtout utile si vous devez occasionnellement analyser des fichiers journaux pour des données ou des sorties de programmes pendant le script shell, car c'est très facile à réaliser dans 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 des tâches pour lesquelles la plupart des gens l'utilisent.
la source
Bien sûr: je travaille dans un environnement où les seuls langages disponibles sont: (un langage shity qui génère COBOL, OMG, OMG), bash (ancienne version), perl (je ne le maîtrise pas encore), sed, awk et quelques autres utilitaires de ligne de commande. Le savoir
awk
m'a fait gagner plusieurs heures (et avait généré plusieurs tâches de traitement de texte de la part de mes collègues - ils viennent me voir au moins trois fois par jour).la source
Je dirais que ça n'en vaut probablement plus la peine. Je l'utilise de temps en temps comme un éditeur de flux beaucoup plus polyvalent que sed avec des capacités de recherche incluses, mais si vous maîtrisez python, je ne connais pas une tâche que vous seriez en mesure de terminer beaucoup plus rapidement pour compenser le temps nécessaire pour 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):
la source
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 prenez que quelques problèmes en cours de route.
la source
Je dirais que oui. Pour des choses simples, AWK est beaucoup plus facile pour l'administrateur système / développeur inexpérimenté que Python. Vous pouvez apprendre un peu AWK et faire beaucoup de choses, apprendre Python signifie apprendre un tout nouveau langage (oui, je sais qu'AWK est un langage est aussi un sens).
Perl pourrait être capable de faire beaucoup de choses qu'AWK peut faire, mais offert le choix à cette époque, je choisirais Python ici. Alors oui, vous devriez apprendre AWK. mais apprenez aussi Python :-)
la source
awk
est un langage de powertool, donc vous allez probablement trouverawk
utilisé quelque part si vous êtes un professionnel de l'informatique de quelque sorte que ce soit. Si vous pouvez gérer la syntaxe et les expressions régulières degrep
etsed
alors vous ne devriez pas avoir de problème à le ramasserawk
et cela en vaut probablement la peine.Là où j'ai trouvé
awk
vraiment brillant, c'est dans la simplification des choses comme le traitement des enregistrements multilignes et la manipulation / interpolation de plusieurs fichiers simultanément.la source
Maintenant que PERL est porté 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. En ce qui concerne le fractionnement automatique, vous pouvez le faire en perl comme ceci:
EDIT: vous voudrez peut-être encore vous familiariser un peu avec awk, car certains autres outils sont basés sur sa philosophie d'actions basées sur des motifs (par exemple DTrace sur Solaris).
la source
Je travaille dans la zone où les fichiers sont au format colonne. Donc awk est inestimable pour moi pour REFORMATER le fichier afin que différents logiciels puissent fonctionner ensemble. Pour les professions non informatiques, utiliser awk est suffisant et parfait. Aujourd'hui, la vitesse de l'ordinateur n'est pas un problème, je peux donc combiner awk et unix pour diriger plusieurs commandes 1 liners dans un "script". Avec la recherche Awk 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é awk a particulièrement apporté de la joie à mon travail, je suis capable d'aider mes collègues à régler les choses rapidement en utilisant awk. Code incroyable pour moi.
la source
J'essayais récemment de visualiser des fichiers pcap réseau enregistrant une attaque DOS qui s'élevait à plus de 20Gbs. J'avais besoin de l'horodatage et des adresses IP. Dans mon scénario, AWK one-liner a également fonctionné fabuleusement 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 dans un laps de temps groupé. Je suis totalement d'accord avec ce que d'autres personnes ont écrit ci-dessus. Cela dépend de vos besoins.
la source
Une des raisons pour ne PAS apprendre awk est qu'il n'a pas de correspondances non gourmandes dans les expressions régulières.
J'ai un code awk que je dois maintenant réécrire uniquement parce que j'ai soudainement débogué qu'il n'y a pas de correspondance non gourmande dans awk / gawk, donc il ne peut pas exécuter correctement certaines expressions rationnelles.
la source
Cela dépend de vos coéquipiers et de votre leader et de la tâche sur laquelle vous travaillez.
la source
J'ai fait du codage en python pour le moment. Mais je ne le connais toujours pas assez bien pour l'utiliser facilement pour de simples transformations de fichiers uniques.
Avec awk, je peux rapidement développer un morceau de code en une ligne sur la ligne de commande Unix qui effectue des transformations assez rapides. 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 instruction "if" et une instruction "printf" ici ou là sur une seule 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 recourrais à python.
J'adore awk. C'est un outil très puissant en combinaison avec sed.
la source