solo quiero saber ¿cuáles son las principales diferencias entre ellos? y el poder de cada idioma (cuando es mejor utilizar).

Edición: no es «contra» como tema, sólo información.

  • Este tipo de llamados de la onu-constructivo preguntas son realmente útiles.
  • Claro, una ficha en la parte frontal de la página para encontrar en ellos sería útil…
  • Para utilidad de python en la línea de comandos, consulte pep

5 Comentarios

  1. 528

    En orden de aparición, los idiomas son sed, awk, perl, python.

    La sed programa es un editor de flujo, y está diseñado para aplicar las acciones de una secuencia de comandos para cada línea (o, más generalmente, a intervalos especificados de líneas) de la entrada del archivo o archivos. Su lenguaje se basa en ed, el editor de Unix, y aunque se ha condicionales y así sucesivamente, lo que es difícil de trabajar para tareas complejas. Usted puede trabajar en pequeños milagros con ella – pero a un costo para el cabello en su cabeza. Sin embargo, es probablemente la forma más rápida de los programas, al intentar tareas dentro de su ámbito de competencias. (Tiene el menos potente de las expresiones regulares de los programas de discusión adecuado para muchos propósitos, pero ciertamente no PCRE – Perl Compatible Regular Expressions)

    La awk programa (nombre de las iniciales de sus autores – Aho, Weinberger y Kernighan) es una herramienta originalmente para el formato de los informes. Puede ser utilizado como un souped up sed; en sus versiones más recientes, es computacionalmente completo. Utiliza una idea interesante – el programa se basa en los patrones coincidentes » y «acciones tomadas cuando el patrón de partidos’. Los patrones son bastante potente (Expresiones Regulares Extendidas). El lenguaje de las acciones es similar a C. Una de las características clave de awk es que divide las líneas de entrada a los campos automáticamente.

    Perl fue escrito en parte como un awk-killer y sed de asesino. Dos de los programas con que se a2p y s2p para la conversión de awk scripts y sed scripts en Perl. Perl es uno de los primeros de la próxima generación de lenguajes de scripting (Tcl/Tk, probablemente, puede reclamar prioridad). Tiene potente integrado expresión regular el manejo con una mucho más potente lenguaje. Proporciona acceso a casi todas las llamadas del sistema, y tiene la capacidad de ampliación de los módulos de CPAN. (Ni awk ni sed es extensible.) Uno de Perl lemas es «TMTOWTDI – Hay más de una manera de hacerlo» (pronunciado «tim-de hoy»). Perl ha ‘objetos’, pero es más un complemento que una parte fundamental de la lengua.

    Python fue escrito a lo último, y probablemente en parte como una reacción a Perl. Tiene algunas interesantes sintáctica ideas (sangría para indicar los niveles – sin llaves o equivalentes). Es más, fundamentalmente orientado a objetos de Perl; es tan extensible como Perl.

    OK – cuando usar cada uno?

    • sed – cuando usted necesita para hacer de texto simple se transforma en archivos.
    • awk – cuando sólo se necesita un formato sencillo y de resumen o transformación de los datos.
    • perl – para casi cualquier tarea, pero especialmente cuando la tarea necesidades de expresiones regulares complejas.
    • python – para las mismas tareas que se podría utilizar Perl.

    No soy consciente de nada de lo que Perl puede hacer que Python no puede, ni viceversa. La elección entre los dos dependerá de otros factores. Aprendí Perl antes de Python, por lo que tienden a utilizarlo. Python tiene menos acrecentada de la sintaxis y, en general, algo más fácil de aprender. Perl 6, cuando esté disponible, será un desarrollo fascinante.

    (Tenga en cuenta que las ‘visiones’ de Perl y Python, en particular, son lamentablemente incompleta; y que los libros se podrían escribir sobre el tema.)

    • Un++++ post, iba a leer de nuevo!
    • impresionante, especialmente el «cuándo utilizar cada» parte
    • No creo que Python era una reacción a Perl. Mi entendimiento es que comenzó su vida como un lenguaje de scripting para la Ameba (unix-ish de investigación O/S) y fue bastante independiente.
    • Estoy de acuerdo con NXC, aparte de expresiones regulares hay poca similitud entre Python y Perl y nada de lo que han visto para sugerir una relación real, inspiración, etc. Veo mucho más cerca de la conexión entre Ruby y Perl de Python y Perl.
    • y Robert Gamble: mi intención era indicar que Python era independiente de Perl. No estoy seguro de cuánto Guido van Rossum sabía acerca de Perl como fue el diseño de Python, pero tal vez hay un caso diciendo que donde había dos opciones y Perl había tomado Una opción, a continuación, Python tomó la opción B.
    • Lol Python y Perl no tienen nada en común. Comparten muchas características en común, como cualquier otro idioma, y luego no.
    • nota: el zen de python es, básicamente, la antítesis de TMTOWTDI así que yo diría que podría ser una reacción a perl. iirc TCL fue un poco después de perl y también es bastante reaccionario en contra de perl, aunque TCLs reacción es en la sintaxis y el lenguaje de la complejidad, no formas de hacer las cosas
    • Tcl/Tk estaba en desarrollo en 1987, se publicó por primera vez en 1988; Perl 1.000 fue lanzado en diciembre de 1987. No creo Tcl/Tk fue una reacción a Perl – fue una invención independiente. Python se inició en 1989. Perl no han tenido mucha influencia en los fundamentos de Python (o Tcl/Tk) después de todo – excepto en la medida en que cualquier lenguaje desarrollos son conscientes de la existencia de otros lenguajes (C++, Java, C#, …).
    • Independientemente de las intenciones originales, es claro que más tarde el desarrollo de Python y la comunidad de python han preferido la legibilidad y consistencia en el Perl más flexible pero concisa de la sintaxis. Excelente post Jonathan
    • Si es sólo sed vs awk, que uno debería aprender ? debo hacer ambas cosas ?
    • Si puedes, aprender tanto, que todavía tienen sus usos como que a mí respecta, y algo diferentes usos. Hay cosas que son fáciles en sed que no son tan fáciles en awk, y muchas cosas más que son factibles en awk que no son factibles en sed. Al parecer, sed es Turing completo, pero eso no la hace fácil de usar como un propósito general lengua. Esto depende en parte de qué tipo de trabajo que usted necesita hacer más de edición de la transformación de los datos (sed) o resumir y dar formato a datos (awk). El aprendizaje de las dos es mejor, sin embargo.
    • Lo que sería más útil para un desarrollador ETL ? ETL o Extracto de la Transformación y Carga de datos de almacenamiento de plazo. Puesto crudamente, el trabajo consiste en la EXTRACCIÓN de datos desde diferentes fuentes dispares (como base de datos, archivos de excel, archivos csv, etc), la TRANSFORMACIÓN de la misma y, a continuación, CARGAR en un datawarehouse (DW) para el análisis, la búsqueda de patrones en los datos, o simplemente registros históricos. por ejemplo. El uso final de un DW – Algoritmos aplicados a un DW de una tienda de comestibles que tiene los datos de los últimos 10 años podría revelar que las personas que tienden a comprar manzanas también comprar naranjas o algo similar.
    • Un enlace que dice vectorsite.net/tsawk_1.html – «sin embargo, Hay cosas que Awk es no. No es muy bien adaptado para muy grandes, complicadas tareas.» Ahora, lo «grande» una tarea que se puede awk manejar ? ¿Cómo sed comparar a ese respecto ?
    • Para ETL, me gustaría dar prioridad a awk más de sed para el aprendizaje (aunque ambos todavía tienen sus usos). El tamaño de la tarea: sed está en su mejor cuando se procesa una línea en un momento, con ninguna de almacenamiento de línea a línea. awk se utiliza a menudo para construir matrices asociativas con datos acumulados de todas las fuentes; se utiliza más memoria, y por lo tanto es mucho más probable que se ejecute en problemas con conjuntos de datos grandes que sed es. Yo no he oído de tsawk antes vinculados a ella. Tiendo a caer de nuevo en Perl (pero se podría hacer mejor con Python) cuando una tarea es demasiado para awk.
    • Algunos adelgazado versiones de unix (en los routers, por ejemplo) podría no tener python o incluso perl instalado. La portabilidad de estos sistemas podría ser una razón para usar algo más primitivo.
    • Bonito post. Sin embargo, me gustaría mencionar que la página ( swtch.com/~rsc/regexp/regexp1.html ) al hablar sobre el uso de la expresión regular de perl (Perl regexp son más flexibles, y puede ser mucho más legible, pero awk & grep (& sed?) son infinitamente más rápido para algunos casos de uso (y más rápido para los demás) que su perl/ruby/python equivalentes)

  2. 88

    Después de dominar una docena de idiomas, te cansas de que la gente como S. Lott (ver su polémica respuesta a esta pregunta, casi la mitad de abajo de los votos como arriba (+45/-22) seis años después de contestar).

    Sed es la mejor herramienta extremadamente simple comando de la línea de tuberías. En las manos de una sed maestro, es conveniente para los one-offs de complejidad arbitraria, pero no debe ser utilizado en el código de producción, salvo en muy simple sustitución de tuberías. Cosas como ‘s/este/que/.’

    Gawk (GNU awk) es por lejos la mejor opción para datos complejos volver a formatear cuando sólo hay una sola fuente de entrada y una sola salida (o varias salidas escriben secuencialmente). Dado que una gran cantidad de 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, sed cuando usted tiene muy complejos de entrada/salida de los escenarios. El más complejo es el problema, el mejor usted está usando python, a partir de un mantenimiento y legibilidad punto de vista. Nota, sin embargo, que un buen programador puede escribir código legible en cualquier idioma, y un mal programador puede escribir tanto crap en cualquier lenguaje útil, por lo que la elección de perl o python puede ser dejado a las preferencias del programador si dijo programador es hábil e inteligente.

    • 100% de acuerdo. Sabiendo que la mayoría, si no todas las herramientas Y cuándo utilizar cada uno es lo que distingue a un buen técnico de uno mediocre.
    • Voy a añadir que otra de las razones para elegir Python o Perl en lugar de awk es cuando la transformación de los requisitos implican complejos de validación de la lógica o de otro idioma tiene un robusto módulo. Pensar acerca de lo que se necesitaría para manejar adecuadamente por ejemplo, correo electrónico o direcciones de la calle en awk y verás a lo que me refiero: perl y python tienen bibliotecas que hacen este tipo de cosas triviales, en awk estos son poco comunes o no está disponible.
    • En realidad, como Perl fue diseñado para abarcar tanto la Sed y Awk; me resulta más fácil escribir en Perl, en lugar de aprender de Sed o Awk.
    • como he mencionado en la respuesta, una advertencia de Perl(&Python, ruby, etc) a través de awk es que algún tipo de regexp son reaaaaaaaaaally más lento en la primera : swtch.com/~rsc/regexp/regexp1.html
    • Sí que muestra un caso patológico. Si cambia de a?ⁿaⁿ a a??ⁿaⁿ, a continuación, ejecute de que 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 ingenuos, tarda más de dos segundos para una de sólo 25. La cosa que usted tiene que darse cuenta es de Perl tiene más regex características de las que más rápido queridos, incluyendo lo que le permite tener el código Perl dentro de la expresión regular que altera lo que coincide con. Se podría implementar un módulo que intercambia la integrada por uno de los otros si desea.
  3. 21

    Primero, hay dos cosas no relacionadas en la lista de «Perl, Python, awk y sed».

    Cosa de 1 simplista de texto herramientas de manipulación.

    • sed. Tiene una estructura relativamente simple ámbito de trabajo se define por la idea de la lectura y el estudio de cada línea de un archivo. sed no está diseñado para ser especialmente legible. Está diseñado para ser muy pequeño y muy eficiente en muy pequeñas servidores unix.

    • awk. Tiene un poco menos fijos, menos simple ámbito de trabajo. Sin embargo, el bucle principal de un programa awk es definido por la lectura implícita de las líneas de un archivo de código fuente.

    Estos no son «completa» de los lenguajes de programación. Mientras que usted puede, con algún trabajo — escribir bastante sofisticados programas en awk, rápidamente se vuelve complicada y difícil de leer.

    Cosa 2 – en general-a los efectos de los lenguajes de programación. Estos tienen una rica variedad de tipos de instrucción, numerosos incorporado en las estructuras de datos, y no con cable-en los supuestos o accesos directos a hablar.

    • Perl.

    • Python.

    Cuándo utilizarlos.

    • sed. Nunca. Realmente no tiene ningún valor en la era moderna de las computadoras con más de 32 kb de memoria. Perl o Python hacer las mismas cosas con más claridad.

    • awk. Nunca. Como sed, es reflejo de una época anterior de la computación. En lugar de mantener este idioma (además de todos los otros necesarios para el éxito de un sistema), es más agradable para simplemente hacer todo en un agradable idioma.

    • Perl. Cualquier problema de programación de ningún tipo. Si te gusta el libre pensamiento de la sintaxis, donde hay muchas, muchas maneras de hacer la misma cosa, perl es divertido.

    • Python. Cualquier problema de programación de ningún tipo. Si te gusta bastante limitado sintaxis, donde hay menos opciones, menos sutileza, y (tal vez) más claridad. Python orientado a objetos de la naturaleza hace que sea más adecuado para los grandes y complejos problemas.

    De fondo — yo no tengo nada contra la sed y awk de la ignorancia. Aprendí awk hace más de 20 años. Hizo muchas cosas con él, que se utiliza para enseñar como un núcleo unix habilidad. Aprendí Perl hace unos 15 años. Hizo muchas y complejas las cosas con él. He dejado atrás, porque puedo hacer las mismas cosas en Python, y es más sencillo y más claro.

    Hay dos problemas graves con sed y awk, ninguno de los cuales son de su edad.

    1. La imperfección de su aplicación. Todo sed y awk ¿puede ser hecho en Python o Perl, a menudo más simple y a veces más rápido, demasiado. Un shell de tubería tiene algunas ventajas en el rendimiento debido a su multi-procesamiento. Python ofrece un subprocess módulo que me permita recuperar esas ventajas.

    2. La necesidad de aprender otro idioma. Haciendo las cosas en Python (o Perl) su aplicación depende en un número de idiomas, con el consiguiente aumento de la claridad.

    • Algunos bastante fatuo argumentos en contra de awk/sed. La llave inglesa no ha suplantado a la llave para abrir la misma razón por la sed y awk todavía barco. A veces el simple herramienta es la mejor para el trabajo. Escribo un montón de perl, pero por una cadena simple de hilo de comandos, awk/sed son más rápidos que perl -e
    • No se puede asumir la disponibilidad de nada, pero sh, sed y awk en la mayoría de los no-linux los sistemas unix. Si quieres algo de trabajo en un fuera-de-la-caja de Solaris, HP/UX y AIX instalar, usted está atascado con sed y awk.
    • de verdad que no. Perl y Python son disponibles de los vendedores. Por ejemplo, vea www-03.ibm.com/systems/p/os/aix/linux
    • una simple cadena de hilo de comandos» – a veces es más rápido para sustituir la tubería con un simple programa en Python.
    • Tratado de aportar mi justificación — estado usando awk y perl durante décadas — no estoy seguro de qué más me puede proporcionar la evidencia de que no es mi experiencia.
    • La mitad de mis scripts de shell utilizar sed o awk. Están lejos de muertos. Python es mi preferido lenguaje de secuencias de comandos, pero a veces la sed y awk son la mejor herramienta para el trabajo. Sólo porque ellos han estado en uso durante muchos años, no significa que sean obsoletos.
    • No estoy sugiriendo que nadie debería intentar construir una web-app en awk, pero decir que nunca debe ser utilizado es un poco indignante. Por una simple s&r y/o modificar (en especial a un archivo de texto delimitado), perl -e o python -c es que nunca va a ser tan eficiente como una sed/awk one-liner.
    • Cantrell: no creo que me dijo que la edad era el problema. Creo que me dijo la incompletitud era el problema. Voy a actualizar la respuesta a enfatizar que.
    • Me estoy tomando una posición fuerte por una razón. Ellos deben ser vistos como diferentes de perl y python; no relacionados. No resolver un problema que tengo nunca más desde que empecé a usar Python para todas las secuencias de comandos.
    • Apoyo totalmente esta respuesta! He usado sed, Perl y Python fuertemente. Vamos sed de tener paz en su ataúd.
    • No me gusta respuestas como esta. Sed y awk son fáciles de entender en un par de horas y mucho más ligero y ampliamente disponibles que un completo lenguaje. Programación de la Shell es tan relevante como siempre, diciendo que «NUNCA» utilizan este o que herramienta es simplemente retardado. Pero, ¿este no fue retardado en la idea de que uno de los fundamentos sobre los que Perl surgió? Oh bien …
    • y awk son fáciles de entender» y que el desorden de mi limitado cerebro espacio con aún más la sintaxis y las reglas semánticas. Se puede ser «simple», pero es sólo dos idiomas más, que no aportan un valor significativo. «ampliamente disponible»? Python está disponible en todas partes, pero Windows por defecto. Mismo como la sed y awk. La respuesta nunca mencionó la programación de la shell. «Nunca» es una palabra importante. Hace que la gente piense acerca de las excepciones y casos especiales que nunca puede ser totalmente enumerados.
    • No voy a seguir discutiendo, creo que «subjetiva» cosas que en realidad no es el objetivo aquí. Y esta conversación es muy de ella. Buena suerte
    • La gente sigue hablando de Python como es la Asamblea o algo. No he utilizado Perl, Awk, SED mucho, pero la sintaxis de Python es mucho más flexible que cualquier otra cosa que yo he usado (Java, C++, C#, Vala, Visual Basic, etc.), a excepción quizá de Lua. Lua es bastante flexible. Diciendo Python sintaxis no es flexible, es como decir que la hierba no es verde, a menos que sea en Inglaterra. Tal vez es menos flexible que la de algunos idiomas, pero es muy flexible en comparación a probablemente la mayoría de las cosas por ahí.
    • Nada mejor que awk para algo como awk '$5 > 100' file.txt
    • Que sería perl -ane 'print if $F[4] > 100' file.txt en Perl. De hecho es un poco más detallado, pero como ya sé Perl de uso en proyectos mucho más grandes; no tengo que aprender otro idioma para escribir. Sólo tengo que saber un par de modificadores de línea de comandos. Yo también podría agregar separado -i interruptor para hacer que editar el archivo en su lugar con la versión de Perl. Así que todavía no me han convencido de que el aprendizaje de otro idioma que no tiene utilidad muy limitada es digno de mi tiempo. ( Sólo me di cuenta de lo que su código awk estaba haciendo desde que se ejecutan a través de a2p )
    • No estoy diciendo que usted debe aprender awk. Yo sólo era la refutación de la «no usar nunca awk’ en el post anterior. Aprendí awk mucho antes de perl, que es en mi caja de herramientas, y lo voy a usar si creo que se soluciona el problema mejor. Concedido, para algo más complicado, voy a utilizar perl. Si un problema se vuelve más complicado y necesito volver a escribir en Perl, por lo menos, no hay mucho que escribir.

  4. 20

    Yo no llamaría sed un completo lenguaje de programación, es un editor de flujo con el lenguaje de las construcciones destinadas a la edición de archivos de texto mediante programación.

    Awk es un poco más de uso general del lenguaje, pero aún es más adecuado para el procesamiento de texto.

    Perl y Python son totalmente operativos, lenguajes de programación de propósito general. Perl tiene sus raíces en el procesamiento de texto y tiene un número de awk-como construcciones (incluso hay un awk-a-script de perl flotando en la red). Hay muchas diferencias entre Perl y Python, su mejor apuesta es, probablemente, para leer los resúmenes de ambos idiomas en algo parecido a la Wikipedia para obtener una buena comprensión de lo que son.

    • He visto una sed implementación de Sokoban, lo que implicaría Turing Completo. Sin embargo, también puede decirse de sendmail.cf y TeX.
    • He trabajado con un chico una vez que escribió PostScript a su vez una impresora láser a un router.
    • Wow! Yo no sabía de una impresora láser podría ser acodadas lo suficiente como para cortar la madera! Oh, lo siento, tipo equivocado de router.
    • sed, no de pleno derecho del lenguaje? Bueno, eso no es completamente cierto, como sed es turing completo 😉
    • El Awk, Perl script viene con Perl (a2p), también lo hace la Sed de Perl script (s2p).
    • Yo he visto una aplicación de la vuelta del lenguaje en awk. (Desde awk puede ser considerado como un analizador por su propio derecho, es bastante sencillo de implementar un intérprete en ella).

  5. 12

    Cuando se utilizan: awk – nunca – S. Lott.

    Creo S. Lott ligeramente perdió la marca con esta recomendación. El hecho es que, en Linux y en otros entornos UNIX, awk es una herramienta útil para ser utilizada con bash, sh, y ksh de texto rápido de trituración. La idea del guión es resolver el problema por el encolado de juntas de esta herramienta, que de la herramienta. Por lo tanto en la administración de los scripts, es común que tiene ls, grep, |, awk, tiempo, ps, etc. Cada uno es una herramienta que el scripter combina como un generador de ladrillo por ladrillo para terminar la obra (para resolver el problema en cuestión).

    Por ejemplo yo soy un miembro del equipo del equipo de gestión de paintball equipo de suministros de dotcom. Este sitio de e-commerce se basa en la pila LAMP. Para el procesamiento automatizado y la normalización de fuentes de datos de diferentes proveedores en el back-end de base de datos, empleamos y mantener la diversificación de la mezcla de secuencias de comandos, incluyendo bash, perl, php, e incluso esperar. Cada uno tiene sus puntos fuertes se basan en los módulos disponibles y API. En los scripts de bash hacemos rápido patrones de partido y las acciones apropiadas en los patrones como sea necesario el uso de awk sin la necesidad de cambiar a PERL. Una cosa que me gustaría señalar, que no se ha enfatizado en el hilo, es que un buen número de estas escrituras que fueron comprados, o recibido de la fuente abierta. Si la secuencia de comandos de vino como Perl, mantenemos como Perl; si la secuencia de comandos de vino como Php, mantenemos como Php; si hubiera venido como bash, mantenemos como bash; no podemos re-escribir en otro idioma simplemente porque pensamos que es menos eficiente en el idioma original.

    • fue S. Lott, quien escribió que la respuesta que usted ha citado, no brian d foy…
    • como nota lateral sobre esta bastante viejo respuesta: nunca analizar la salida de ls, utilizar global en su lugar. leer esto.

Dejar respuesta

Please enter your comment!
Please enter your name here