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