martes, 14 de diciembre de 2010

linux: seccionar archivos por hora

A veces es necesario seccionar o extraer bloques de log, debido a que el archivo log es muy grande, y porque es más cómodo revisar la info en un archivo más pequeño. Para ello tengo este utilitario que recibe unos parametros de entrada:

#saca_log.sh
#!/bin/bash -x
#parametros de entrada
#:$1 archivo log de entrada, en formato gz
#:$2: hora y min de extraccion, (ejemplos 00, 10:20:3 o 10:20:23)
#:$3 archivo donde se guarda el log de salida

let count=`echo $2 | wc -m`
let count=$count-1
#echo $count
nice -n 19 zcat $1 | awk '{if(substr($1,1,'$count') == "'$2'") print $0}' > $3

Notar que la shell utiliza el comando zcat, para extraer directamente desde un archivo comprimido en formato gz. se puede reemplazar por el comando "cat".

Para ejecutarlo:
./saca_log.sh log_completo.log 10:10 log_de_salida.log