solo quiero saber cuáles son las principales diferencias entre ellos? y el poder de cada idioma (donde es mejor usarlo).
Editar: no es "vs." como tema, solo información.
solo quiero saber cuáles son las principales diferencias entre ellos? y el poder de cada idioma (donde es mejor usarlo).
Editar: no es "vs." como tema, solo información.
Respuestas:
En orden de aparición, las lenguas son sed
, awk
, perl
, python
.
El sed
programa es un editor de flujo y está diseñado para aplicar las acciones de un script a cada línea (o, más generalmente, a rangos de líneas específicos) 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. Puede hacer milagros menores con él, pero a un costo para el cabello en su cabeza. Sin embargo, es probablemente el más rápido de los programas cuando intenta realizar tareas dentro de su competencia. (Tiene las expresiones regulares menos poderosas de los programas discutidos - adecuado para muchos propósitos, pero ciertamente no PCRE - Expresiones regulares compatibles con Perl)
El awk
programa (nombre de las iniciales de sus autores: Aho, Weinberger y Kernighan) es una herramienta inicialmente para formatear informes. Se puede usar como una mejora 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 potentes (expresiones regulares extendidas). El lenguaje para las acciones es similar al C. Una de las características clave de awk
es que divide la entrada automáticamente en registros y cada registro en campos.
Perl fue escrito en parte como un awk-killer y sed-killer. Dos de los programas provistos con él son a2p
y s2p
para convertir awk
scripts y sed
scripts en Perl. Perl es uno de los primeros lenguajes de secuencias de comandos de la próxima generación (Tcl / Tk probablemente puede reclamar primacía). Tiene un poderoso manejo integrado de expresiones regulares con un lenguaje mucho más poderoso. Proporciona acceso a casi todas las llamadas al sistema y tiene la extensibilidad de los módulos CPAN. (Ni awk
ni sed
es extensible). 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 en último lugar, y probablemente en parte como una reacción a Perl. Tiene algunas ideas sintácticas interesantes (sangría para indicar niveles, sin llaves ni equivalentes). Está más fundamentalmente orientado a objetos que Perl; Es tan extensible como Perl.
OK, ¿cuándo usar cada uno?
No estoy al tanto 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 existiera Python, así que tiendo a usarlo. Python tiene una sintaxis menos aumentada y generalmente es algo más simple 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).
awk
más sed
para aprender (aunque ambos todavía tienen sus usos). En cuanto al tamaño de la tarea: sed
está en su mejor momento cuando procesa una línea a la vez, sin almacenamiento de línea a línea. awk
a menudo se usa para construir matrices asociativas con datos acumulados de todas las fuentes; utiliza más memoria y, por lo tanto, es mucho más probable que tenga problemas con grandes conjuntos de datos de lo que sed
es. No he oído hablar tsawk
antes de que lo vincules. Tiendo a recurrir a Perl (pero podría hacerlo mejor con Python) cuando una tarea es demasiado awk
.
Después de dominar unas pocas docenas de idiomas, te cansas de personas como S. Lott (ver su controvertida respuesta a esta pregunta, casi la mitad de los votos negativos que el aumento (+ 45 / -22) seis años después de responder).
Sed es la mejor herramienta para tuberías de línea de comandos extremadamente simples. En manos de un maestro sed, es adecuado para casos únicos de complejidad arbitraria, pero no debe usarse en el código de producción, excepto en tuberías de sustitución muy simples. Cosas como 's / this / that /.'
Gawk (el GNU awk) es, con mucho, la mejor opción para reformatear datos complejos cuando solo hay una única fuente de entrada y una sola salida (o múltiples salidas escritas secuencialmente). Dado que gran parte del trabajo del 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 es el problema, mejor está usando Python, desde un 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 basura imposible de mantener en cualquier lenguaje útil, por lo que la elección de perl o python puede dejarse a las preferencias del programador si dicho programador es hábil e inteligente.
a?ⁿaⁿ
a, a??ⁿaⁿ
entonces ejecute eso en Perl 5 con un ⁿ
de 1,000,000, se ejecuta en menos de dos segundos. time perl -E '$x=1_000_000;$_="a"x$x;$m=("a??"x$x).("a"x$x);say $_=~$m'
Si ejecuta el ingenuo, lleva más de dos segundos para un ⁿ
solo 25. Lo que debe tener en cuenta es que Perl tiene más funciones de expresiones regulares que las más rápidas, incluido el permitir que tenga un código de Perl dentro de la expresión regular que altera lo que coincide. . Si lo desea, puede implementar un módulo que intercambie el incorporado por uno de esos otros.
No llamaría a sed un lenguaje de programación completo, es un editor de flujo con construcciones de lenguaje destinadas a editar archivos de texto mediante programación.
Awk es un poco más un lenguaje de propósito general, pero sigue siendo el más adecuado para el procesamiento de texto.
Perl y Python son lenguajes de programación de uso general completamente desarrollados. Perl tiene sus raíces en el procesamiento de texto y tiene una serie de construcciones tipo awk (incluso hay un script de awk a perl flotando en la red). Hay muchas diferencias entre Perl y Python, su mejor opción es probablemente leer los resúmenes de ambos idiomas en algo como Wikipedia para comprender cuáles son.
Primero, hay dos cosas no relacionadas en la lista "Perl, Python awk y sed".
Cosa 1: herramientas de manipulación de texto simplistas.
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 ligeramente menos fijo y menos simple. Sin embargo, el bucle principal de un programa awk se define mediante la lectura implícita de líneas de un archivo fuente.
Estos no son lenguajes de programación "completos". Si bien puede, con algo de trabajo, escribir programas bastante sofisticados en awk, rápidamente se vuelve complicado y difícil de leer.
Cosa 2: lenguajes de programación de uso general. Estos tienen una gran variedad de tipos de declaraciones, numerosas estructuras de datos integradas y no hay suposiciones o atajos conectados para hablar.
Perl.
Pitón.
Cuando 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. Al igual que sed, refleja una era anterior de la informática. En lugar de mantener este idioma (además de todos los demás necesarios para un sistema exitoso), es más agradable simplemente hacer todo en un idioma 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 sed y awk por ignorancia. Aprendí awk hace más de 20 años. Hice muchas cosas con eso; solía enseñarlo como una habilidad básica de Unix. Aprendí Perl hace unos 15 años. Hice muchas cosas sofisticadas con él. Dejé ambas cosas atrás porque puedo hacer las mismas cosas en Python, y es más simple y más 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 sed y awk hacen se puede hacer en Python o Perl, a menudo de manera más simple y a veces también más rápido. Una tubería de shell tiene algunas ventajas de rendimiento debido a su multiprocesamiento. Python ofrece un subprocess
módulo 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 la claridad.
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 el procesamiento rápido de texto. La idea de la secuencia de comandos en sí misma es que resuelve su problema al pegar esta herramienta, esa herramienta. Por lo tanto, en los scripts de administración, es común tener ls, grep, |, awk, time, ps, etc. Cada uno es una herramienta que el scripter combina como un constructor ladrillo por ladrillo para terminar el edificio (para resolver el problema en cuestión) .
Por ejemplo, soy miembro del equipo de gestión del equipo. suministros de equipo de paintballdotcom 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, incluidos bash, perl, php e incluso esperamos. Cada uno tiene sus puntos fuertes basados en los módulos y API disponibles. En los scripts de bash, hacemos coincidencias de patrones rápidos y acciones apropiadas en los patrones según sea necesario usando awk sin la 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 u 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;
ls
, use glob en su lugar. Lee esto.