[bcn-pm] Proceso de estadisticas avanzando
Xavier Noria
fxnahashref.com
Dme Maig 18 04:39:49 PDT 2005
On May 18, 2005, at 11:39, Jose Pedro Andres wrote:
> El tema esta en que no se pueden borrar los archivos de logs (
> porque tendria que reinciar el apache de cada balanceador web para que
> los creara de nuevo ), por lo que lo que me interesaba era usar el
> Tie::File para ir quitando las lineas que ya he procesado ( de esta
> forma, y en teoria, puedo ir recortando el archivo a medida que
> proceso
> las estadisticas, sin tocar el resto del archivo )
> Ahora mismo lo que hago es ir haciendo lineas hasta agotar el
> archivo, y truncarlo al final, pero me gustaria hacerlo "por la forma
> mas correcta", que es ir "quitando las lineas que proceso, y dejar
> el resto.
>
Un archivo abierto de escritura, o bien se cepilla lo que hay al
abrirlo, o bien se pone en modo "append". En el segundo caso, se
pueden sobreescribir bytes ya existentes, pero no eliminarlos. Esa es
la restriccion fundamental a tener en cuenta para lo que quieres
conseguir.
Por ello, para cargarte las n primeras lineas de un archivo hay en
realidad que reescribirlo con las restantes. Por ejemplo usando sh
podriamos hacer:
#!/bin/sh
# envia las priemeras 1000 lineas a webalizer
head -n 1000 logfile | webalizer
# deja en logfile las restantes sin usar wc -l y tail
perl -ni -e 'print if $. > 1000' logfile
Mas o menos la idea de base es esa. Preguntaba por la version simple
con un while porque hacer eso suena MAS costoso ya que has de volver
a escribir megas de texto a disco por cada 1000 lineas que envies.
Al margen del while (que haria innecesario Tie::File porque la logica
es sencilla), estas completamente seguro de que Tie::File es el que
carga la maquina? No es el webalizer ni ninguna otra cosa relacionada
con ese proceso? Tie::File esta bastante pensado y uno de sus
objetivos es tratar eficientemente con archivos grandes, es un poco
raro. Como lo usas exactamente?
-- fxn
Més informació de la llista de correu Barcelona-pm