2009-11-25 16 views
5

Sé que la pregunta es muy subjetiva. Pero no puedo formular la pregunta de una manera mucho mejor. Agradecería alguna guía.Qué entre Bash/Python/Perl/Ruby/Sed/Awk para la administración del sistema, accesorios de codificación

A menudo, como desarrollador, me resultaba más fácil si podía tener algunas herramientas para realizar una tarea razonablemente compleja en un archivo de registro, o un conjunto de archivos fuente, o algún conjunto de datos, etc.

Claramente, cuando se necesita hacer el mismo tipo de tarea repetitivamente y cuando la velocidad es crítica, puedo pensar en escribirla en C++/Java.

Pero la mayoría de las veces, es un tipo de actividad de procesamiento de texto o búsqueda de archivos que solo quiero hacer una vez para realizar una comprobación rápida o hacer un análisis preliminar, etc. En tales casos, estaría mejor haciendo la tarea manualmente en lugar de escribir en C++/Java. Pero seguramente podría hacerlo en segundos si conociera algún lenguaje como Bash/Python/Perl/Ruby/Sed/Awk.

Sé que toda esta pregunta es subjetiva y no hay una respuesta definitiva objetiva, pero, en general, ¿qué siente la comunidad de desarrolladores en su conjunto? ¿Qué subconjunto de estos idiomas debería saber para poder realizar todo este tipo de tareas fácilmente y mejorar mi productividad?

¿Sería Perl una buena opción?
Es un súper conjunto de Sed/Awk, además de que permite escribir el código de acceso. Puedo terminar con menos líneas de código. No es legible ni fácil de mantener, pero de todos modos nunca quise esas características. Lo único que me molesta es la publicidad negativa que Perl tiene últimamente y ha sido criticada mucho por la comunidad de Ruby/Python. Además, no estoy seguro de si puede reemplazar totalmente las secuencias de comandos bash. Si no es así, entonces ¿Perl + Bash es una buena combinación para este tipo de tareas?

Respuesta

1

Yo usaría Perl en una combinación bash/sed/awk. Por qué ?

  1. Solo tiene el ejecutable, en lugar de generar múltiples ejecutables para hacer el trabajo.
  2. Puede hacer uso de una amplia gama de módulos de Perl para hacer casi cualquier cosa (ver CPAN para los módulos disponibles)

De hecho, yo recomendaría a cualquier lenguaje de programación sobre la cáscara/awk/combinación de sed, por las mismas razones No tengo ningún problema con sed/awk per se, pero a medida que las soluciones necesarias se vuelven más complejas/largas, encuentro que los lenguajes de scripting más potentes son más escalables y (en cierta medida) más reutilizables para su reutilización.

+0

CPAN es increíble, y la OMI es la característica más olvidada de Perl. – MiffTheFox

3

Encuentro Python + Bash un muy buen combo.
Normalmente utilizo Python porque es muy legible y fácil de mantener. Y porque hay mucha documentación en línea disponible.

Por cierto, yo sugiero que lea http://www.ibm.com/developerworks/aix/library/au-python/

+0

Buena respuesta, pero tenga en cuenta que los bloques "try: except:" en ese artículo son una mala idea. –

0

Mi primer puerto de escala es fiesta con sed para proporcionar un procesamiento de expresiones regulares. Puedes hacer mucho con un bash para loop, grep y algunas expresiones regulares.

Vale la pena aprender expresiones regulares si aún no las conoce. Un editor que le permite usarlos (como vi) es extremadamente útil cuando se manipulan archivos (por ejemplo, tiene un conjunto de datos extraídos de un archivo de registro y debe convertirlo en un conjunto de sentencias de SQL, por ejemplo).

Si me toma más de unos minutos encontrar la forma de hacer la tarea de análisis que estoy tratando de hacer en bash/sed, generalmente termino usando perl. Como sugiere ikkebr, python es probablemente tan bueno como (o mejor que) perl; Simplemente tuve la desgracia de aprender perl primero, así que estoy mucho más familiarizado con él; si tuviera que volver a empezar, aprendería Python en su lugar, creo.

4

Python es más expresivo y legible que bash, pero requiere más configuración: import os y así sucesivamente. Para tareas simples, bash es más rápido, que es lo más importante para esto. ¡Y no subestime el poder de la redirección de entrada/salida en bash!

7

Tiendo a hacer un montón de procesamiento con ruby. Tiene toda la funcionalidad de Perl, pero me parece un poco más legible. Tanto perl como ruby admiten las opciones -n, -e y -p.

-e 'command' one line of script. Several -e's allowed. Omit [programfile] 
-n    assume 'while gets(); ... end' loop around your script 
-p    assume loop like -n but print line also like sed 

Por ejemplo, en el rubí

seq 1 4 | ruby -ne 'BEGIN{ $product = 1 }; $product *= $_.to_i; END { puts $product }' 
24 

que es muy similar a Perl

seq 1 4 | perl -ne 'BEGIN{ $product = 1 }; $product *= $_; END { print $product }' 
24 

En Python, el mismo se vería así:

seq 1 4 | python -c 'import sys; print reduce(lambda x,y : int(x)*int(y), sys.stdin.read().splitlines(True))' 
24 

Si bien es posible hacer lo anterior en bash/awk/se d, estarás limitado por su falta de funciones más avanzadas.

1

Con scripts de shell, todo lo que necesita saber es un poco bash/sh y un montón de awk. Bash para llamar a tus comandos, y awk para su procesamiento. Algunas de las herramientas de Unix a continuación, contrariamente al hecho de que muchas personas las usan, no son necesarias porque awk puede hacer sus funciones.

1) cut 
2) sed 
3) wc 
4) (e)grep 
5) cat 
6) head 
7) etc.. 

y algunos otros cuyas funciones se superponen. Al final, su script no se saturará con herramientas redundantes y ralentizará su script.

Perl/Python son herramientas sysadmin muy útiles también. Ambos hacen cosas similares y tienen bibliotecas que ayudan en sus tareas de sysadmin. La única diferencia significativa es, estéticamente hablando, la apariencia de su código escrito en ellas.

Puede obtener más información acerca de Ruby si lo desea, pero en términos de sysadmin, diría que prefiera Perl/Python.

Cuestiones relacionadas