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