Re: [eside-ghost] optimización de shell scripts

Santi Saez santi en hostalia.com
Mar Mar 27 19:04:44 CEST 2007


El 27/03/2007, a las 18:10, Saritar escribió:

>
> Buenas,
>
>
> Tengo un problemilla del que no sé muy bien cómo salir. Necesito  
> hacer un shell script en bash que procese un archivo de log de  
> Apache de 20 MB, comprimido o no, en el que cada línea contiene una  
> IP, la URL, hora de acceso etc y hay que sacar un listado por  
> pantalla no ordenado de cada IP con el número de accesos etc etc
> Mi duda es la siguiente, alguien sabe cómo se puede optimizar un  
> script de manera que el tiempo de procesamiento sea aceptable?
> Es decir, cómo se pueden utilizar óptimamente awk, grep, cut etc  
> para procesar un fichero tan grande o alguna estructura de  
> almacenamiento de memoria "eficaz".
> Sin complicarme nada la vida, es decir de la manera más guarra  
> tarda como 20 minutos y tiene que ser bastante más rápido (al final  
> del e-mail he pegado una parte del script)
> Cualquier tipo de consejo, tutorial o ayuda por pequeño que parezca  
> se agradecerá infinitamente.
>
(..)

>     LISTA_IPS=``
>
>
>     for i in $LISTA_IPS
>     do
>         NUM_ENTRADAS=`gzip -cd $1 | grep -c $i`
>         echo $i -- $NUM_ENTRADAS
>
>     done

Por cada IP a procesar estás llamado a gzip, es normal que tarde  
tanto.. mira si te sirve algo así para esta estadística en concreto:

	zcat $1 | awk -F- '{print $1}' | sort | uniq -c | sort -n

Así haces una única llamada a gzip.

Echale un vistazo a este script, seguro que te sirve para sacar  
alguna idea:

http://www.intuitive.com/wicked/showscript.cgi?084-webaccess.sh

--
Santi Saez





Más información sobre la lista de distribución eside-ghost