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 tuvieras123|...|...|... 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_interesanSó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