Solución:
En orden de aparición, los idiomas son sed
, awk
, perl
, python
.
los sed
El 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 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 él para tareas complejas. Puedes hacer pequeños milagros con él, pero a costa del cabello de tu cabeza. Sin embargo, probablemente sea el más rápido de los programas a la hora de realizar tareas dentro de su competencia. (Tiene las expresiones regulares menos poderosas de los programas discutidos, adecuadas para muchos propósitos, pero ciertamente no PCRE – Expresiones regulares compatibles con Perl)
los awk
El programa (nombre de las iniciales de sus autores: Aho, Weinberger y Kernighan) es una herramienta inicialmente para formatear informes. Se puede utilizar como truco. 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 de las acciones es similar a 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 asesino de awk y sed-killer. Dos de los programas que se proporcionan con él son a2p
y s2p
para convertir awk
guiones y sed
scripts en Perl. Perl es uno de los lenguajes de scripting más antiguos de la próxima generación (Tcl / Tk probablemente pueda reclamar la 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 capacidad de ampliación de los módulos CPAN. (Ninguno 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 reacción a Perl. Tiene algunas ideas sintácticas interesantes (sangría para indicar niveles, sin llaves ni equivalentes). Es más fundamentalmente orientado a objetos que Perl; es tan extensible como Perl.
Bien, ¿cuándo usar cada uno?
- Sed: cuando necesita realizar transformaciones de texto simples en archivos.
- Awk: cuando solo necesita un formato simple y un resumen 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 existiera Python, así que tiendo a usarlo. Python tiene una sintaxis menos desarrollada 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, están lamentablemente incompletas; se podrían escribir libros completos sobre el tema).
Después de dominar algunas docenas de idiomas, te cansas de personas como S. Lott (mira su controvertida respuesta a esta pregunta, casi la mitad de votos negativos que positivos (+ 45 / -22) seis años después de responder).
Sed es la mejor herramienta para canalizaciones 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 código de producción excepto en tuberías de sustitución muy simples. Cosas como ‘s / esto / aquello /’.
Gawk (el GNU awk) es, con mucho, la mejor opción para reformatear datos complejos cuando hay una sola 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 boquiabierto en dos horas, es la mejor opción. En este planeta, ¡cuanto más simple y rápido, 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 del mantenimiento y la 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 que no se puede 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.
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 lenguaje un poco más 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 propósito general completamente desarrollados. Perl tiene sus raíces en el procesamiento de texto y tiene una serie de construcciones similares a awk (incluso hay un script de awk a perl flotando en la red). Hay muchas diferencias entre Perl y Python, lo mejor que puede hacer es leer los resúmenes de ambos lenguajes en algo como Wikipedia para tener una buena idea de lo que son.