
Estoy buscando unguión rápidoque analizará un mail.log grande y devolverá la parteentre dos marcas de tiempo especificadas. Me gustaría ejecutarlo en todos mis servidores de correo y pedirles que copien las partes del registro relevantes en una ubicación central para su posterior análisis.
He escrito algo en bash que funciona, pero es lento.
¿Alguien sabe decualquier cosa que ya existapara lograr esto, ¿o necesito aprender Perl e inventar algo yo mismo?
(No voy a poner esto en SO, ya que todavía no estoy en el punto en el que quieroescribircualquier código, solo busco algo que alguien más ya esté usando)
Respuesta1
Me encanta awk :)
Para mis registros, que están en el formato:
Jul 14 12:49:10 xxxxxx sendmail[31337]: ...........
Yo usaría:
awk '$3 >= "12:00:00" && $3 <= "13:00:00" {print;}' < /var/log/maillog
Es de suponer que puede adaptarlo según sea necesario, por ejemplo, si no divide los registros por día.
Prima:
Formato Apache, que tengo por ahí:
xxx.xxx.xxx.xxx - - [01/Jul/2009:03:06:24 -0400] "GET /favicon.ico HTTP/1.1" 200 3638
awk '$4 >= "[01/Jul/2009:03:00:00" && $4 <= "[01/Jul/2009:04:00:00" {print;}' < access_log
Respuesta2
Para un rango de días específico y para imprimir > archivo de salida
(No puedo ponerlo como comentario en la respuesta anterior, de lo contrario lo habré hecho)
HT
awk '$2 >= "21" && $3 >= "09:00:00" && $2 >= "21" && $3 <= "11:00:10" {print > "m_range.log";}' < /var/log/m.log
cat m_range.log
...
Nov 21 09:00:17 mail postfix/qmgr[1694]: 1C50D276524A: from=<[email protected]>, size=2378, nrcpt=1 (queue active)
...