Quelles sont les différences entre Perl, Python, AWK et sed? [fermé]

je veux juste savoir quelles sont les principales différences entre eux? et la puissance de chaque langue (où il est préférable de l'utiliser).

Edit: ce n'est pas "contre" comme sujet, juste de l'information.

231
demandé sur Leon Timmermans 2008-12-15 00:00:04

5 réponses

Dans l'ordre d'apparition, les langues sont sed , awk , perl , python .

le programme sed est un éditeur de flux, et est conçu pour appliquer les actions d'un script à chaque ligne (ou, plus généralement, aux gammes spécifiées de lignes) du ou des fichiers d'entrée. Son langage est basé sur ed , l'éditeur Unix, et bien qu'il ait des conditionnels et ainsi de suite, il est difficile de travailler avec pour des tâches complexes. Vous pouvez travailler des petits miracles avec elle - mais à un coût pour les cheveux sur votre tête. Cependant, il est probablement le plus rapide des programmes lorsqu'il tente des tâches dans son domaine de compétence. (Il a les expressions régulières les moins puissantes des programmes discutés - adéquat pour de nombreux buts, mais certainement pas PCRE - Perl-Expressions régulières compatibles)

le programme awk (nom tiré des initiales de ses auteurs - Aho, Weinberger et Kernighan) est un outil utilisé à l'origine pour formater des rapports. Il peut être utilisé comme un gonflé sed ; dans ses versions plus récentes, il est mathématiquement complète. Il utilise une idée intéressante - le programme est basé sur 'patterns matched' et 'actions prises quand le pattern matched'. Les motifs sont assez puissants (expressions régulières étendues). Le langage pour les actions est similaire à C. Une des caractéristiques clés de awk est qu'il divise les lignes d'entrée en champs automatiquement.

Perl a été écrit en partie comme un tueur d'awk et un tueur de sed. Deux des programmes fournis avec elle sont a2p et s2p pour convertir awk scripts et sed scripts en Perl. Perl est l'un des premiers langages de script de la prochaine génération (Tcl/Tk peut probablement revendiquer la primauté). Il dispose d'une puissante gestion d'expression régulière intégrée avec un langage beaucoup plus puissant. Il donne accès à presque tous les appels système, et a l'extensibilité des modules CPAN. (Ni awk ni sed est extensible. Une des devises de Perl est "TMTOWTDI-There's more than one way to do it" (prononcé "tim-toady"). Perl a des "objets", mais c'est plus un ajout qu'une partie fondamentale du langage.

Python a été écrit en dernier, et probablement en partie comme une réaction à Perl. Il a quelques idées syntaxiques intéressantes (indentation pour indiquer des niveaux - pas d'accolades ou des équivalents). Il est plus fondamentalement orienté objet que Perl; il est juste aussi extensible que Perl.

OK-quand utiliser chacun?

  • sed - quand vous avez besoin de faire des conversions de texte simple sur les fichiers.
  • awk-quand vous avez seulement besoin de formatage simple et de synthèse ou de transformation des données.
  • perl-pour presque n'importe quelle tâche, mais surtout quand la tâche nécessite des expressions régulières complexes.
  • python-pour les mêmes tâches que vous pouvez utiliser Perl.

Je ne suis pas au courant de quoi que Perl puisse faire que Python ne puisse pas, ni vice versa. Le choix entre les deux dépend d'autres facteurs. J'ai appris Perl avant Qu'il y ait un Python, donc j'ai tendance à l'utiliser. Python a une syntaxe moins accentuée et est généralement un peu plus simple à apprendre. Perl 6, lorsqu'il est disponible, sera un développement fascinant.

(notez que les' aperçus ' de Perl et Python, en particulier, sont tristement incomplet; des livres entiers pourraient être écrits sur le sujet.)

505
répondu Jonathan Leffler 2008-12-14 21:44:28

après avoir maîtrisé quelques douzaines de langues, on se lasse de gens comme S. Lott (voir sa réponse controversée à cette question, près de la moitié moins de voix en baisse que vers le haut (+45/-22) six ans après avoir répondu).

Sed est le meilleur outil extrêmement simple ligne de commande des pipelines. Dans les mains d'un maître sed, il est adapté pour les cas exceptionnels de complexité arbitraire, mais il ne devrait pas être utilisé dans le code de production, sauf dans des pipelines de substitution très simples. Des trucs comme s '/cette/que/.

Gawk (le GNU awk) est de loin le meilleur choix pour reformater des données complexes lorsqu'il n'y a qu'une seule source d'entrée et une seule sortie (ou plusieurs sorties écrites séquentiellement). Étant donné qu'une grande partie du travail réel est conforme à cette description, et qu'un bon programmeur peut apprendre le gawk en deux heures, c'est le meilleur choix. Sur cette planète, plus simple et plus rapide est mieux!

Perl ou Python sont bien mieux que n'importe quelle version d'awk ou sed lorsque vous avez des scénarios d'entrée/sortie très complexes. Plus le problème est complexe, mieux vous utilisez python, du point de vue de la maintenance et de la lisibilité. Notez, cependant, qu'un bon programmeur peut écrire du code lisible dans n'importe quelle langue, et qu'un mauvais programmeur peut écrire des conneries impossibles à gérer dans n'importe quelle langue utile, de sorte que le choix de perl ou python peut être laissé en toute sécurité aux préférences du programmeur si ledit programmeur est habile et intelligent.

82
répondu Charlie 2014-09-08 15:20:15

Premièrement, il y a deux choses sans rapport dans la liste "Perl, Python awk and sed".

Chose 1 - simpliste de texte outils de manipulation.

  • sed. Il a une portée fixe, relativement simple de travail défini par l'idée de lire et d'examiner chaque ligne d'un dossier. sed n'est pas conçu pour être particulièrement lisible. Il est conçu pour être très petit et très efficace sur de très petite serveurs unix.

  • awk. Il a une portée un peu moins fixe, moins simple de travail. Cependant, la boucle principale d'un programme awk est définie par la lecture implicite de lignes d'un fichier source.

ce ne sont pas des langages de programmation "complets". Alors que vous pouvez -- avec un peu de travail -- écrire des programmes assez sophistiqués dans awk, il devient rapidement compliqué et difficile à lire.

Chose 2 - général, de la programmation langue. Ceux-ci ont une riche variété de types d'énoncés, de nombreuses structures de données intégrées, et pas d'hypothèses ou de raccourcis câblés pour parler.

  • Perl.

  • Python.

Quand les utiliser.

  • sed. Jamais. Il n'a vraiment aucune valeur dans l'ère moderne des ordinateurs avec plus de 32K de mémoire. Perl ou Python font les mêmes choses plus clairement.

  • awk. Jamais. Comme sed, il reflète une ère plus ancienne de l'informatique. Plutôt que de maintenir cette langue (en plus de tous les autres requis pour un système réussi), il est plus agréable de tout simplement faire dans une langue agréable.

  • Perl. Tout problème de programmation de toute nature. Si vous aimez la syntaxe libre-pensée, où il ya beaucoup, beaucoup de façons pour faire la même chose, perl est un plaisir.

  • Python. Tout problème de programmation de toute nature. Si vous aimez la syntaxe assez limitée, où il y a moins de choix, moins de subtilité, et (peut-être) plus de clarté. La nature orientée objet de Python le rend plus adapté pour les grands problèmes complexes.

arrière-plan -- je ne suis pas dénigrer sed et awk de l'ignorance. J'ai appris awk il y a plus de 20 ans. A fait beaucoup de choses avec it; utilisé pour l'enseigner comme une compétence unix de base. J'ai appris Perl il y a 15 ans. Il a fait beaucoup de choses sophistiquées avec. J'ai laissé les deux parce que je peux faire les mêmes choses en Python -- et c'est plus simple et plus clair.

il y a deux problèmes sérieux avec sed et awk, aucun d'eux n'est leur âge.

  1. L'incomplétude de leur mise en œuvre. Tout ce que sed et awk font peut être fait en Python ou Perl, souvent plus simplement et parfois plus rapide, trop. Un pipeline shell présente certains avantages de rendement en raison de son traitement multiple. Python offre un module subprocess pour me permettre de récupérer ces avantages.

  2. le besoin d'apprendre encore une autre langue. En faisant des choses en Python (ou Perl), votre implémentation dépend de moins de langues, ce qui augmente la clarté.

24
répondu S.Lott 2008-12-31 08:02:09

Je n'appellerais pas sed un langage de programmation À part entière, c'est un éditeur de flux avec des constructions de langage visant à éditer des fichiers de texte par programmation.

Awk est un peu plus un langage à usage général, mais il est encore mieux adapté au traitement de texte.

Perl et Python sont des langages de programmation généralisés. Perl a ses racines dans le traitement de texte et a un certain nombre de constructions awk-like (il y a même un awk-à-script perl qui circulent sur le net). Il y a beaucoup de différences entre Perl et Python, votre meilleur pari est probablement de lire les résumés des deux langues sur quelque chose comme Wikipedia pour avoir une bonne compréhension de ce qu'elles sont.

19
répondu Robert Gamble 2008-12-14 21:18:47

Quand les utiliser: awk - ne - S. Lott.

je pense que S. Lott a un peu raté la cible avec cette recommandation. Le fait est que, sur Linux et les autres environnements UNIX, awk est un outil utile à utiliser avec bash, sh et ksh pour des processus de texte rapides. L'idée du script lui-même est que vous résolvez votre problème en collant ensemble cet outil, cet outil. Par conséquent, dans les scripts d'administration, il est commun d'avoir ls, grep,|, awk, time, ps, etc. Chacun est un outil que le scripteur combine comme un constructeur brique par brique pour finir le bâtiment (pour résoudre le problème à portée de main).

par exemple, je suis membre de l'équipe qui gère paintball gear supplies dotcom. Ce site de commerce électronique est basé sur la pile de lampes. Pour le traitement automatisé et la normalisation des flux de données de divers fournisseurs dans la base de données back end, nous employons et maintenons un mélange diversifié de scripts, y compris bash, perl, php, et même expect. Chacun a ses les points forts sont basés sur les modules disponibles et L'API. Dans les scripts bash, nous faisons une correspondance rapide des patterns et des actions appropriées sur les patterns au besoin en utilisant awk sans avoir besoin de passer à PERL. Une chose que je voudrais également souligner, qui n'a pas été souligné dans le fil, est qu'un bon nombre de ces scripts ont été achetés, ou obtenu à partir de l'open source. Si le script est venu comme Perl, nous maintenir en tant que Perl; si le script est venu comme Php, nous maintenir en tant que Php; si c'est venu comme bash, nous maintenez-le comme bash; nous ne le réécrivons pas dans une autre langue juste parce que nous pensons qu'il est moins efficace dans la langue originale.

11
répondu tao quam 2014-09-08 16:34:53