Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Statistique avec PERL

4 réponses
Avatar
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=E9
s'est connect=E9 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.

4 réponses

Avatar
David LE BOURGEOIS
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

Avatar
Alex Marandon
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

Avatar
JPP
[...]
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"...

Avatar
Alex Marandon
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.