Me falto lo de $encontrado :D, a lo que escrib� puedes cambiarlo por (recuerde que este c�digo va dentro del bucle)

do {
   @field = split(/\|/, $line);
   # como la l�nea tiene esta estructura entonces
   # el campo buscado es el 6
# $id|host|fecha|petici�n|algo|algo|$encontrado|m�s_cosas_que_no_me_interesan
   print $field[6] , "\n";
} if ( $line =~ /^$id\|/);

Saludos!

nmag only
______________

nmag only escribi�::

Supuestamente $id es la variable que contiene el ID a hacer match, pues simplemente puedes poner dentro del bucle una l�nea como:

   print $line if ( $line =~ /^$id/ );

Lo que hace esto es que imprime la l�nea si es que esta empieza con el contenido de la variable $id, pero esto todav�a tiene un inconveniente, que pasa si $id tiene un valor de longitud 3 es decir 3 caracteres pero este inicio coincide con un id de 5 caracteres es decir si tuvieras
123|...|...|...
12345|...|...|...

si buscar por el $id = 123 ambas l�neas anteriores har�n match as� que puedes arreglarlo poniendo la barra vertical como delimitadora de id as�:

   print $line if ( $line =~ /^$id\|/ );

Ahora en el ejemplo anterior no s�lo buscar� por un id que empieze con 123 sin� que exige que empieze por 123|

Saludos!

nmag only
__________

Amaya escribi�::

Hola listeros,

Ando muy entretenida ;-) parseando unos bonitos logs ;-) y tengo un
problema que seguro que es la tonter�a m�s grande del mundo.

Tengo una expresi�n regular y necesito que haga un poco m�s:

# Abro un archivo
while (chomp($id = <FTAG>)){
    # Abro otro archivo
    while (chop($line = <FAUTH>)){
        # Esto me funciona, pero no muy bien
        $line =~ /.*?\|.*?\|.*?\|.*?\|.*?\|.*?\|(.*?.)\|.*?/ ;
        $encontrado  = $+ ;
# Esto es lo que necesito que me encuentre:
        # La l�nea debe empezar por el contenido de la variable $id.
        $line = ~/^\$id\|.*?\|.*?\|.*?\|.*?\|.*?\|(.*?.)\|.*/;
        #####################################################
        #         ~~~~~ C�mo escribo esto????
        #####################################################
        $encontrado = $+ ;
if($encontrado){
               print $encontrado, "\n";
        }
    }
}

La l�nea t�pica de logs ser�a as�:
4a10a003-f2da63e8c3-0|lxrhgpp04|2003-01-20 07:01:06,372|AUTH |[Thread-8]|1|Aplicaci�nCRC|1|351|1|0|0|0||
Abstrayendo:

$id|host|fecha|petici�n|algo|algo|$encontrado|m�s_cosas_que_no_me_interesan

S�lo quiero saber el campo $encontrado de la l�nea que empieza por $id.

Estoy empezando tanto con Perl como con las regexp y me cuesta un poco.
Gracias por vuestro tiempo :-)







--
Telef�nica: Crece el ruido de la Co###�f|#A==-<ic��[[i�+++ NO CARRIER




Responder a