Le 25 juin 2008 15:47, Jean-Michel Bonnefond <pompon2@???> a écrit :
>
> Bonjour a tous,
>
> Je souhaiterai écrire une petit programe probablement en bash, perl, awk ou
> autre peu importe, qui me permette d'afficher un fichier de log de facon
> selective.
>
> Il s'agit de logs radius qui se présentent par blocs, exemple :
>
> Packet-Type = Access-Request
> Thu Jun 24 23:58:07 2008
> User-Name = "jp1234@???"
> User-Password = "******"
> NAS-IP-Address = 192.168.20.1
> Framed-IP-Address = 192.168.30.2
> NAS-Identifier = "Virtual-NASMONITOR"
> Proxy-State = 0x3932
> Client-IP-Address = 199.33.33.199
>
> Packet-Type = Access-Accept
> Thu Jun 24 23:58:07 2008
> NAS-IP-Address = 192.168.20.1
> Client-IP-Address = 199.33.33.199
> Realm = "dummy.fr"
>
> Je voudrais afficher en temps réel dans un terminal (l'equivalent d'un "tail
> -f "), ou stocker dans un fichier tous les blocs qui contiennent un pattern
> particulier, par exemple une adresse ip précise.
>
> Mon probleme c'est d'afficher le bloc complet, les blocs étant séparé par
> une ligne vide et la valeur recherhé pouvant se situer a n'importe quel
> endroit du bloc, qui n'a de plus pas une longueur fixe.
Ce n'est pas clair ton truc : ton exemple ci-dessus vaut quoi ? C'est
un extrait ou tout le log est déjà partitionné en block (auquel cas ça
répond à ta question).
Si je comprends bien tu veux ne sortir que les blocks et ils
commencent tous par Packet-Type et ils finissent par une ligne vide ?
Si c'est le cas, c'est relativement trivial :
#!/usr/bin/perl
use strict;
use warnings;
my $block = "0";
while(<>) {
$block = "1" if ( /^Packet-Type/ );
$block = "0" if ( /^$/ );
print if ( $block eq "1" );
};
PK
--
|\ _,,,---,,_ Patrice KARATCHENTZEFF
ZZZzz /,`.-'`' -. ;-;;,_
mailto:p.karatchentzeff@free.fr
|,4- ) )-,_. ,\ ( `'-'
http://p.karatchentzeff.free.fr
'---''(_/--' `-'\_)