• Publicidad

Cómo mostrar un grupo de palabras restantes en línea de log

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Cómo mostrar un grupo de palabras restantes en línea de log

Notapor sigar » 2006-11-01 13:37 @609

Hola, estoy queriendo parsear algunos datos de mis logs, por ejemplo uno de los logs que quiero mostrar ordenado es el maillog. esto es lo que tengo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w
$LOGFILE = "/var/log/maillog";
open(LOGFILE) or die("El fichero no pudo ser abierto");
print "\n Fecha: | Nombre: | Hora:  \n";
print "------------------------------\n";
foreach $line (<LOGFILE>) {
    ($mes, $dia, $hora, $nombre, $comando, $msj) = split(' ',$line);
     print "$dia $mes | $nombre | $hora | $comando ! $msj \n ";

}
close(LOGFILE);
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


pero el $msj como es de esperarse sólo me llama a una palabra y lo que quiero es que llame al resto de la línea, pues a veces hay tres palabras y otras veces muchas más... ¿cómo podría llamar a todo el grupo de palabras restantes?

Y otra pregunta.. ¿hay algún modo para poder llamar sólo a las líneas generadas en los últimos dos meses, por ejemplo?

Agradecería mucho su respuesta..

:?:
Avatar de Usuario
sigar
Perlero nuevo
Perlero nuevo
 
Mensajes: 31
Registrado: 2006-07-07 10:59 @499
Ubicación: Peru

Publicidad

Notapor explorer » 2006-11-01 13:45 @615

Hay que "absorberlas" todas juntas... eso es lo que hace un array:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
    ($mes, $dia, $hora, $nombre, $comando, @msj) = split(' ',$line);
     print "$dia $mes | $nombre | $hora | $comando ! @msj \n ";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


En cuanto a lo de la fecha... depende de cómo esté codificada en el log... si con números, o con nombres.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor sigar » 2006-11-01 14:02 @626

Muchas gracias por tu respuesta :D

¿Hay algún modo en el que pueda mostrar sólo las últimas "n" líneas del log?
Avatar de Usuario
sigar
Perlero nuevo
Perlero nuevo
 
Mensajes: 31
Registrado: 2006-07-07 10:59 @499
Ubicación: Peru

Notapor explorer » 2006-11-01 14:20 @639

Estando en sistemas Linux/Unix, usaría el comando 'tail'.

En Perl, primero habría que saber cuantas líneas tiene el fichero. Pero tenemos el problema de que quizás el fichero sea muy grande. Si no lo es, nos lo leemos entero en un array y sacamos las líneas con '@array[-n..-1]'.

Otra opción: imitar el funcionamiento de tail: ir leyendo línea a línea y la variable especial '$.' que nos dice el número de línea leída, pasándola por una operación módulo ('%'), nos dirá el índice del elemento dentro de un array donde almacenarla. Al final del bucle de lectura, en el array tendremos las últimas n líneas. Para saber la primera habrá que ver el último valor de '$.'. Esta es desde luego la mejor opción porque no almacenamos todo el fichero en memoria.

Existe también el comando 'tail' en las Perl Power Tools.

Existe el módulo File::Tail que permite la lectura continua de ficheros de log.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 16 invitados