¿Cuáles son las diferencias entre Perl, Python, AWK y sed?
language-comparisons (5)
¿Quieres saber cuáles son las principales diferencias entre ellos? y el poder de cada idioma (donde es mejor usarlo).
Edit: no es "vs." como tema, solo informacion
Cuándo usarlos: awk - nunca - S. Lott.
Creo que S. Lott perdió un poco la marca con esta recomendación. El hecho es que, en Linux y en otros entornos UNIX, awk es una herramienta útil para usar con bash, sh y ksh para procesos rápidos de texto. La idea del script en sí mismo es que resuelves tu problema pegando esta herramienta, esa herramienta. Por lo tanto, en los scripts de administración, es común que tenga ls, grep, |, awk, time, ps, etc. Cada uno es una herramienta que el scripter combina como un constructor de ladrillo a ladrillo para terminar el edificio (para resolver el problema actual) .
Por ejemplo, soy un miembro del equipo que administra los equipos de paintball que suministran dotcom. Este sitio de comercio electrónico se basa en la pila LAMP. Para el procesamiento automatizado y la normalización de las fuentes de datos de varios proveedores en la base de datos de back-end, empleamos y mantenemos una mezcla diversificada de scripts, incluyendo bash, perl, php e incluso esperamos. Cada uno tiene sus fortalezas basadas en los módulos y API disponibles. En los scripts de bash, hacemos coincidencias rápidas de patrones y acciones apropiadas en los patrones según sea necesario mediante el uso de awk sin necesidad de cambiar a PERL. Una cosa que también me gustaría señalar, que no se ha enfatizado en el hilo, es que un buen número de estos scripts se compraron, o se obtuvieron del código abierto. Si el script vino como Perl, lo mantenemos como Perl; si el script vino como Php, lo mantenemos como Php; si vino como bash, lo mantenemos como bash; no lo reescribimos en otro idioma solo porque creemos que es menos eficiente en el idioma original.
Después de dominar unas pocas docenas de idiomas, te cansas de gente como S. Lott (mira su respuesta controvertida a esta pregunta, casi la mitad de los votos negativos que recibes (+ 45 / -22) seis años después de responder).
Sed es la mejor herramienta para tuberías de línea de comando extremadamente simples. En manos de un maestro maestro, es adecuado para una sola vez de complejidad arbitraria, pero no debe usarse en código de producción, excepto en tuberías de sustitución muy simples. Cosas como ''s / this / that /.''
Gawk (el awk de GNU) es, con mucho, la mejor opción para reformatear datos complejos cuando solo hay una fuente de entrada única y una salida única (o, múltiples salidas escritas secuencialmente). Dado que una gran cantidad de trabajo en el mundo real se ajusta a esta descripción, y un buen programador puede aprender gawk en dos horas, es la mejor opción. ¡En este planeta, más simple y más rápido es mejor!
Perl o Python son mucho mejores que cualquier versión de awk o sed cuando tienes escenarios de entrada / salida muy complejos. Cuanto más complejo sea el problema, mejor será el uso de python, desde el punto de vista de mantenimiento y legibilidad. Sin embargo, tenga en cuenta que un buen programador puede escribir código legible en cualquier idioma, y un mal programador puede escribir una mierda que no se puede mantener en cualquier lenguaje útil, por lo que la elección de perl o python se puede dejar a las preferencias del programador si dicho programador es seguro. hábil e inteligente
No lo llamaría un lenguaje de programación completo, es un editor de secuencias con construcciones de lenguaje destinadas a editar archivos de texto mediante programación.
Awk es un poco más de un lenguaje de propósito general, pero aún es el más adecuado para el procesamiento de texto.
Perl y Python son lenguajes de programación de propósito general y completos. Perl tiene sus raíces en el procesamiento de texto y tiene una serie de construcciones tipo awk (incluso hay un script awk-to-perl flotando en la red). Hay muchas diferencias entre Perl y Python, su mejor apuesta es probablemente leer los resúmenes de ambos idiomas en algo como Wikipedia para obtener un buen conocimiento de lo que son.
Primero, hay dos cosas no relacionadas en la lista "Perl, awth y sed de Python".
Cosa 1 - herramientas de manipulación de texto simplista.
sed Tiene un alcance de trabajo fijo y relativamente simple definido por la idea de leer y examinar cada línea de un archivo. sed no está diseñado para ser particularmente legible. Está diseñado para ser muy pequeño y muy eficiente en servidores Unix muy pequeños.
awk Tiene un alcance de trabajo un poco menos fijo, menos simple. Sin embargo, el bucle principal de un programa awk está definido por la lectura implícita de líneas de un archivo fuente.
Estos no son lenguajes de programación "completos". Si bien puede, con un poco de trabajo, escribir programas bastante sofisticados en awk, se complica rápidamente y es difícil de leer.
Cosa 2 - lenguajes de programación de propósitos generales. Estos tienen una gran variedad de tipos de declaraciones, numerosas estructuras de datos integradas y no tienen suposiciones ni atajos de los que hablar.
Perl.
Pitón.
Cuándo usarlos.
sed Nunca. Realmente no tiene ningún valor en la era moderna de las computadoras con más de 32K de memoria. Perl o Python hacen las mismas cosas más claramente.
awk Nunca. Como sed, refleja una era anterior de la computación. En lugar de mantener este lenguaje (además de todos los otros necesarios para un sistema exitoso), es más agradable simplemente hacer todo en un lenguaje agradable.
Perl. Cualquier problema de programación de cualquier tipo. Si te gusta la sintaxis de pensamiento libre, donde hay muchas, muchas formas de hacer lo mismo, perl es divertido.
Pitón. Cualquier problema de programación de cualquier tipo. Si le gusta la sintaxis bastante limitada, donde hay menos opciones, menos sutileza y (quizás) más claridad. La naturaleza orientada a objetos de Python lo hace más adecuado para problemas grandes y complejos.
Antecedentes: no estoy atacando a nadie por la ignorancia. Aprendí awk hace más de 20 años. Hice muchas cosas con él; Se utiliza para enseñar como una habilidad central de Unix. Aprendí Perl hace unos 15 años. Hice muchas cosas sofisticadas con él. He dejado ambas cosas atrás porque puedo hacer las mismas cosas en Python, y es más simple y claro.
Hay dos problemas serios con sed y awk, ninguno de los cuales es su edad.
Lo incompleto de su implementación. Todo lo que se puede hacer con awth y awk se puede hacer en Python o Perl, a menudo de forma más sencilla y, a veces, también más rápida. Un shell shell tiene algunas ventajas de rendimiento debido a su multiprocesamiento. Python ofrece un módulo de
subprocess
que me permite recuperar esas ventajas.La necesidad de aprender otro idioma. Al hacer cosas en Python (o Perl), su implementación depende de menos idiomas, con el consiguiente aumento de claridad.
En orden de aparición, los idiomas son sed
, awk
, perl
, python
.
El programa sed
es un editor de secuencias y está diseñado para aplicar las acciones de un script a cada línea (o, más generalmente, a rangos de líneas especificados) del archivo o archivos de entrada. Su lenguaje se basa en ed
, el editor de Unix, y aunque tiene condicionales, etc., es difícil trabajar con tareas complejas. Puedes hacer pequeños milagros con él, pero a un costo para el cabello de tu cabeza. Sin embargo, es probable que sea el más rápido de los programas al intentar realizar tareas dentro de su ámbito. (Tiene las expresiones regulares menos poderosas de los programas analizados, adecuados para muchos propósitos, pero ciertamente no PCRE - Expresiones regulares compatibles con Perl)
El programa awk
(nombre de las iniciales de sus autores, Aho, Weinberger y Kernighan) es una herramienta originalmente para formatear informes. Puede ser utilizado como un sed
de sed
; En sus versiones más recientes, es computacionalmente completo. Utiliza una idea interesante: el programa se basa en ''patrones coincidentes'' y ''acciones tomadas cuando el patrón coincide''. Los patrones son bastante poderosos (expresiones regulares extendidas). El lenguaje para las acciones es similar a C. Una de las características clave de awk
es que divide las líneas de entrada en campos automáticamente.
Perl fue escrito en parte como awk-killer y sed-killer. Dos de los programas provistos con él son a2p
y s2p
para convertir scripts awk
y scripts sed
en Perl. Perl es uno de los primeros de la próxima generación de lenguajes de script (Tcl / Tk probablemente puede reclamar primacía). Tiene un potente manejo integrado de expresiones regulares con un lenguaje mucho más poderoso. Proporciona acceso a casi todas las llamadas del sistema y tiene la extensibilidad de los módulos CPAN. (Ni awk
ni sed
son extensibles). Uno de los lemas de Perl es "TMTOWTDI - Hay más de una forma de hacerlo" (pronunciado "tim-toady"). Perl tiene ''objetos'', pero es más un complemento que una parte fundamental del lenguaje.
Python fue escrito al final, y probablemente en parte como una reacción a Perl. Tiene algunas ideas sintácticas interesantes (sangría para indicar niveles, sin llaves o equivalentes). Es más fundamentalmente orientado a objetos que Perl; Es tan extensible como Perl.
OK - ¿Cuándo usar cada uno?
- sed - cuando necesitas hacer transformaciones simples de texto en archivos.
- awk: cuando solo necesita un formato y resumen simple o transformación de datos.
- perl: para casi cualquier tarea, pero especialmente cuando la tarea necesita expresiones regulares complejas.
- python: para las mismas tareas para las que podría usar Perl.
No tengo conocimiento de nada que Perl pueda hacer que Python no pueda, ni viceversa. La elección entre los dos dependería de otros factores. Aprendí Perl antes de que hubiera un Python, así que tiendo a usarlo. Python tiene una sintaxis menos acentuada y, en general, es algo más sencillo de aprender. Perl 6, cuando esté disponible, será un desarrollo fascinante.
(Tenga en cuenta que las "descripciones generales" de Perl y Python, en particular, son lamentablemente incompletas; se podrían escribir libros completos sobre el tema).