Statistique avec PERL

Le
Tony.delplace
Bonjour


je dois faire des statistiques a partir d un fichier de log

le fichier est de cette forme :

TOTO s est connecte en root sur HOST.FR le Apr 19 11:11:15
TOTO s est connecte en root sur HOST.FR le Apr 19 15:25:51
TOTO s est connecte en root sur HOST.FR le Apr 19 17:21:02
TOTO s est connecte en root sur HOST.FR le Apr 19 22:02:34



je dois en sortir des stats indiquant combien de fois un user donné
s'est connecté sur un host ou combien de connexion ont eu lieu sur un
host, etc

n'ayant aucune notion de PERL j'aimerai avoir quelques pistes pour
realiser ce script.


merci d'avance de votre aide


Tony D.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
David LE BOURGEOIS
Le #143570
Bonjour


Bonjour.

je dois faire des statistiques a partir d un fichier de log

le fichier est de cette forme :

TOTO s est connecte en root sur HOST.FR le Apr 19 11:11:15
TOTO s est connecte en root sur HOST.FR le Apr 19 15:25:51
TOTO s est connecte en root sur HOST.FR le Apr 19 17:21:02
TOTO s est connecte en root sur HOST.FR le Apr 19 22:02:34

je dois en sortir des stats indiquant combien de fois un user donné
s'est connecté sur un host ou combien de connexion ont eu lieu sur un
host, etc

n'ayant aucune notion de PERL j'aimerai avoir quelques pistes pour
realiser ce script.


Voici un lien contenant déjà pas mal de documentation sur Perl :

http://perl.enstimac.fr/

Et une solution parmi d'autres :

$ cat log
TOTO s'est connecté [...] sur host.fr le [...]
TITI s'est connecté [...] sur host.fr le [...]
TATA s'est connecté [...] sur host.fr le [...]
FOO s'est connecté [...] sur localhost le [...]
FOO s'est connecté [...] sur localhost le [...]
FOO s'est connecté [...] sur bar.fr le [...]


$ cat parse
#!/usr/bin/perl -wT

use strict;

my %users;
my %hosts;
my %t;
my $t;
my $u;
my $h;
my $n;

while (<>) {
if (/^(.+) s'est connecté.*sur (.+) le/) {
${$users{$1}}{$2}++;
$hosts{$2}++;
}
}
while (($u, $t) = each %users) {
print "$u s'est connectén";
while (($h, $n) = each %{$t}) {
print "t$n fois sur $hn";
}
}
while (($h, $n) = each %hosts) {
print "$n connexion(s) sur $hn";
}


$ ./parse log
TATA s'est connecté
1 fois sur host.fr
TOTO s'est connecté
1 fois sur host.fr
FOO s'est connecté
1 fois sur bar.fr
2 fois sur localhost
TITI s'est connecté
1 fois sur host.fr
1 connexion(s) sur bar.fr
3 connexion(s) sur host.fr
2 connexion(s) sur localhost


merci d'avance de votre aide


De rien.

--
David LE BOURGEOIS
e-mail : david.lebourgeois (at) free.fr
jabber : david.lebourgeois (at) jabber.fr

Alex Marandon
Le #143569
wrote:
je dois faire des statistiques a partir d un fichier de log

le fichier est de cette forme :

TOTO s est connecte en root sur HOST.FR le Apr 19 11:11:15
TOTO s est connecte en root sur HOST.FR le Apr 19 15:25:51
TOTO s est connecte en root sur HOST.FR le Apr 19 17:21:02
TOTO s est connecte en root sur HOST.FR le Apr 19 22:02:34



je dois en sortir des stats indiquant combien de fois un user donné
s'est connecté sur un host ou combien de connexion ont eu lieu sur un
host, etc

n'ayant aucune notion de PERL j'aimerai avoir quelques pistes pour
realiser ce script.


Je pense que grep est ton ami. Appele en contexte scalaire, il te
renvoie le nombre d'occurences.

$ cat test.txt
TOTO s est connecte en root sur HOST.FR le Apr 19 11:11:15
TOTO s est connecte en root sur HOST.FR le Apr 19 15:25:51
TOTO s est connecte en root sur HOST.FR le Apr 19 17:21:02
TOTO s est connecte en root sur HOST.FR le Apr 19 22:02:34
$ perl -e 'print ( scalar grep /TOTO/, <> ), "n" ' test.txt
4
$ perl -e 'print ( scalar grep /17:21:02/, <> ), "n" ' test.txt
1

JPP
Le #143453
[...]
Je pense que grep est ton ami. Appele en contexte scalaire, il te
renvoie le nombre d'occurences.

$ cat test.txt
TOTO s est connecte en root sur HOST.FR le Apr 19 11:11:15
TOTO s est connecte en root sur HOST.FR le Apr 19 15:25:51
TOTO s est connecte en root sur HOST.FR le Apr 19 17:21:02
TOTO s est connecte en root sur HOST.FR le Apr 19 22:02:34
$ perl -e 'print ( scalar grep /TOTO/, <> ), "n" ' test.txt
4
$ perl -e 'print ( scalar grep /17:21:02/, <> ), "n" ' test.txt
1


Oui enfin, dans ce cas, il faut surtout espérer qu'il n'y ait pas
d'utilisateur nommé "root" ou "connect"...

Alex Marandon
Le #143452
JPP wrote:

[...]
Je pense que grep est ton ami. Appele en contexte scalaire, il te
renvoie le nombre d'occurences.

$ cat test.txt
TOTO s est connecte en root sur HOST.FR le Apr 19 11:11:15
TOTO s est connecte en root sur HOST.FR le Apr 19 15:25:51
TOTO s est connecte en root sur HOST.FR le Apr 19 17:21:02
TOTO s est connecte en root sur HOST.FR le Apr 19 22:02:34
$ perl -e 'print ( scalar grep /TOTO/, <> ), "n" ' test.txt
4
$ perl -e 'print ( scalar grep /17:21:02/, <> ), "n" ' test.txt
1


Oui enfin, dans ce cas, il faut surtout espérer qu'il n'y ait pas
d'utilisateur nommé "root" ou "connect"...


Ce genre de cas peut etre pris en compte avec des regexps un peu plus
sophistiquees.


Publicité
Poster une réponse
Anonyme