Re: Petit problème de programation

Page principale

Répondre à ce message
Auteur: Jean-Michel Bonnefond
Date:  
À: Patrice Karatchentzeff, guilde
Sujet: Re: Petit problème de programation
Merci Patrice, mais non, le seul délimiteur que j'ai est la ligne vide entre
les blocs, il existe en fait de nombreux type de blocs différents pouvant
comporter a n'importe quel endroit une information qui les lie entre eux
(adresse ip, nom d'utilisateur, realm, etc)...
Cependant, le script perl proposé par Jean-Luc répond parfaitement a mon
problème.

Jean-Michel.

Le 26 juin 2008 09:58, Patrice Karatchentzeff <
patrice.karatchentzeff@???> a écrit :

> 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
> '---''(_/--' `-'\_)
>
>