Programar script

Hola,
Quiero programar un filtro que me procese un fichero de log de un programa de Química Cuántica (Gaussian). Lo que quiero es extraer algunos valores concretos de un fichero de log gigantesco.
He oído que perl es muy bueno para esto. Pero también me han recomendado C y Java.
¿Con qué lenguaje crees que es más fácil hacer esta tarea?
Si me recomiendas algún otro lenguaje...
Muchas gracias.
Respuesta
1
Para programar filtros, sin duda la mejor herramienta que dispones es Perl, por su potencia trabajando con texto. De todos modos te comparo un poco los lenguajes que me indicas, más bash y PHP:
Perl es uno de los lenguajes de programación más importantes en el entorno Unix/Linux. De igual modo, C++, Java, PHP y bash ocupan puestos similares, por lo que nos encontramos con varias opciones a la hora de desarrollar un programa. ¿Cuál elegir?
Larry Wall, por lo visto, pensó en crear un lenguaje de programación sencillo, ágil para el programador, como lo es bash, que nos permite realizar un script, sin casi conocer la sintaxis, y probarlo un instante después. Perl también se parece a C, no sólo en la sintaxis, sino que al igual que C, aporta potencia, o sea, capacidad de realizar tareas complicadas, usando librerías, y estructuras de datos complejas. Sin embargo, no siempre podemos sustituir bash y C por Perl, aunque éste reúna tantas ventajas.
Con lo que respecta a Java, éste supera por un poco a Perl, en su gran cualidad: la multiplataforma. Hay máquinas virtuales de Java para multitud de plataformas, aunque un script en Perl de Linux se ejecutará sin problemas en BSD, Solaris, DOS, Win9x, NT, MacOS, OS/2, AmigaOS, VMS, sin tocar una sola línea. Seguimos comparando Java con Perl y observamos que Java es un lenguaje totalmente orientado a objeto. Perl 5 ó superior también soporta objetos, aunque sigue permitiendo desarrollar un programa sin necesidad de usarlos; Java no. En lo que respecta a la programación client-side Java es el amo, dado que es un lenguaje de programación inventado precisamente con este fin. Perl no está pensado para trabajar en el cliente, aunque hay un proyecto que apunta en esta dirección, con el que de momento, sólo se ha conseguido que Perl se ejecute en Netscape usando un plug-in especial.
Y PHP parece ser la evolución de Perl. Si conoces Perl, el paso a PHP es inmediato. PHP dispone de comandos propios (sin requerir el uso de librerías/módulos) para, por ejemplo, descargar una página web de Internet. En Perl es necesario usar módulos adicionales.
Dicho todo esto, parece que Perl no es muy bueno, pues los lenguajes comparados lo superan en uno u otro punto. Sin embargo los desarrolladores de Perl seguimos usándolo, porque está claro que Perl aún tiene mucho futuro, y algunas cualidades únicas.
Perl es muy bueno en su especialidad, y ahí no le supera ningún otro lenguaje. Y esa especialidad es el tratamiento de ficheros de texto (esto no significa que Perl sea un procesador de textos). Supongamos el siguiente ejemplo práctico:
Disponemos de un fichero de texto como el siguiente, llamado weblog.txt, que no es más que el fichero de log de un servidor web:
[recuadro]
195.235.121.194 - - [21/Jan/2000:12:26:24 +0100] "GET /1999/SUM991022.html HTTP/1.1" 200 65676
195.57.127.106 - - [21/Jan/2000:12:58:33 +0100] "GET / HTTP/1.0" 200 6739
195.57.127.106 - - [21/Jan/2000:12:59:11 +0100] "GET /SUM0001.html HTTP/1.0" 200 3363
195.57.127.106 - - [21/Jan/2000:12:59:13 +0100] "GET /azulpi.gif HTTP/1.0" 200 159
195.57.127.106 - - [21/Jan/2000:12:59:13 +0100] "GET /azulpd.gif HTTP/1.0" 200 158
195.57.127.106 - - [21/Jan/2000:12:59:40 +0100] "GET /boe/ HTTP/1.0" 404 198
192.187.17.82 - - [21/Jan/2000:13:03:08 +0100] "GET / HTTP/1.0" 200 6768
192.187.17.82 - - [21/Jan/2000:13:03:36 +0100] "GET /SUM0001.html HTTP/1.0" 200 3371
192.187.17.82 - - [21/Jan/2000:13:03:41 +0100] "GET /azulpi.gif HTTP/1.0" 200 159
192.187.17.82 - - [21/Jan/2000:13:03:41 +0100] "GET /azulpd.gif HTTP/1.0" 200 158
159.237.12.32 - - [21/Jan/2000:13:04:24 +0100] "GET /2000/SUM000108.html HTTP/1.0" 200 61911
159.237.12.32 - - [21/Jan/2000:13:04:51 +0100] "GET /2000/SUM000108.html HTTP/1.0" 200 61911
159.237.12.32 - - [21/Jan/2000:13:07:07 +0100] "GET /2000/SUM000115.html HTTP/1.0" 200 59938
159.237.12.32 - - [21/Jan/2000:13:07:11 +0100] "GET /2000/SUM000115.html HTTP/1.0" 200 59938
159.237.12.32 - - [21/Jan/2000:13:14:04 +0100] "GET /2000/tiffs/01/A01889.tif HTTP/1.0" 200 39088
192.187.17.82 - - [21/Jan/2000:13:14:12 +0100] "GET /2000/tiffs/01/A01889.tif HTTP/1.0" 200 39088
192.187.17.82 - - [21/Jan/2000:13:14:34 +0100] "GET /2000/tiffs/01/A01889.tif HTTP/1.0" 304 -
Y queremos calcular el número de IPs distintas que aparecen. En Perl resulta tan sencillo como esto:
[recuadro]
#!/usr/bin/perl -w
# Se lee el fichero de datos, línea a línea
open(FILEINPUT, "<weblog.txt");
while ($linea = <FILEINPUT>) {
$linea =~ /^(.*) - - /;
$IP{$1} = 1;
}
# Se escriben en pantalla las IPs
foreach (keys %IP) {
print "$_\n";
}
close(FILEINPUT);
1;
El resultado es:
[recuadro]
192.187.17.82
159.237.12.32
195.235.121.194
195.57.127.106
Este ejemplo utiliza dos potentes herramientas de Perl: expresiones regulares y tablas hash. Pronto veremos lo que son ...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas