Parse log : affucher uniquement les bonnes lignes
Résolu
LezardMoo
Messages postés
554
Date d'inscription
Statut
Membre
Dernière intervention
-
LezardMoo Messages postés 554 Date d'inscription Statut Membre Dernière intervention -
LezardMoo Messages postés 554 Date d'inscription Statut Membre Dernière intervention -
Bonjour tout le monde !!
je suis en train de faire un petit script d'analyse du fichier log "mail.info"
Voici une première ébauche du script (ce n'est pas définitif, surtout si vous trouvez des choses a redire, je suis preneur ^^)
Donc voila, dans ce bout de code je récupère en premier lieu la date ensuite le user et pour finir l'heure du log.
Ma demande porte sur l'utilisation de la date ainsi que de l'heure, j'aimerais pouvoir afficher uniquement les lignes contenant la date et l'heure du jour pour ne pas avoir a parser les lignes qui date d'il y a trois semaines(ce qui en plus serait néfaste pour la suite du programme) mais je ne vois pas comment faire.
j'ai testé des trucs du genre
mais le retour c'est ca
J'ai lu quelque part que ca signifiait que la variable était vide... hum c'est la première à être rempli.... ^^
Merci d'avance ( :
:(){ :|:& };:
je suis en train de faire un petit script d'analyse du fichier log "mail.info"
Voici une première ébauche du script (ce n'est pas définitif, surtout si vous trouvez des choses a redire, je suis preneur ^^)
#!/usr/bin/perl
use strict;
use warnings;
use POSIX qw(strftime);
my $mailog = "mail.info";
open(MAIL,"<$mailog") or die("err open $mailog");
while (my $lines = <MAIL>) {
########## DATE%d ##########
my $date = strftime "%d", localtime;
#my $date = 10;
if($date =~ /0./) {
my @date1 = split(/0/, $date);
print $date1[1];
}else {
print "$date\n";
}
############################
########## USER ##########
my @userSplit = split(/</, $lines);
#print "$userSplit[1]\n";
my @user = split(/@/, $userSplit[1]);
print "$user[0]\n";
##########################
########## TIME ##########
#my @timeSplit = split(/ /,$lines);
#print $timeSplit[4];
my @timeSplit = split(/ /, $lines);
my @time = split(/:/, $timeSplit[3]);
my $realTime = "$time[0]:$time[1]";
print "$realTime\n";
##########################
}
close(MAIL);
Donc voila, dans ce bout de code je récupère en premier lieu la date ensuite le user et pour finir l'heure du log.
Ma demande porte sur l'utilisation de la date ainsi que de l'heure, j'aimerais pouvoir afficher uniquement les lignes contenant la date et l'heure du jour pour ne pas avoir a parser les lignes qui date d'il y a trois semaines(ce qui en plus serait néfaste pour la suite du programme) mais je ne vois pas comment faire.
j'ai testé des trucs du genre
if(/$date/) {}
mais le retour c'est ca
:q!
Use of uninitialized value $_ in print at...
J'ai lu quelque part que ca signifiait que la variable était vide... hum c'est la première à être rempli.... ^^
Merci d'avance ( :
:(){ :|:& };:
A voir également:
- Parse log : affucher uniquement les bonnes lignes
- Vpn no log - Guide
- Log freebox - Forum Freebox
- View rescue log - Guide
- Log crash windows - Guide
- 0.log miui - Forum Logiciels
3 réponses
Bonjour LezardMoo,
Tu dis "j'aimerais pouvoir afficher uniquement les lignes contenant la date et l'heure du jour". Je suppose que tu veux dire "j'aimerais pouvoir afficher uniquement les lignes contenant la date du jour"
Peux-tu donner des exemples de lignes de ton "mail.info" ?
Ton format n'a pas l'air d'être le même que le mien sur ma Debian.
Dal
Tu dis "j'aimerais pouvoir afficher uniquement les lignes contenant la date et l'heure du jour". Je suppose que tu veux dire "j'aimerais pouvoir afficher uniquement les lignes contenant la date du jour"
Peux-tu donner des exemples de lignes de ton "mail.info" ?
Ton format n'a pas l'air d'être le même que le mien sur ma Debian.
Dal
Salut Dal,
oui effectivement c'est bien ce que j'ai voulu dire ^^, l'heure me servira après pour detecter le nombre de mails envoyés sur un laps de temps donné.
voici un exemple de ligne de mail.info (je suis aussi sur Debian
donc je voudrais pouvoir afficher uniquement la lignes du 7 janvier
Je suis encore en train de tester, j'ai deja réussis mais impossible de retrouver ce f****ng script...
Il me semble que dedans j'utilisais des regex du genre
mais à l'évidence, ce n'était pas ca puisque ca ne fonctionne pas, il m'affiche $lines sans matcher.
j'ai aussi testé ca
marche pas non plus...
oui effectivement c'est bien ce que j'ai voulu dire ^^, l'heure me servira après pour detecter le nombre de mails envoyés sur un laps de temps donné.
voici un exemple de ligne de mail.info (je suis aussi sur Debian
Jan 6 18:02:44 testmail postfix/pickup[16791]: 726D543494: uid=0 from=<root>
Jan 7 22:40:54 testmail postfix/pickup[16791]: 745D543445: uid=0 from=<root>
Jan 8 01:08:34 testmail postfix/pickup[16791]: 720D544594: uid=0 from=<root>
donc je voudrais pouvoir afficher uniquement la lignes du 7 janvier
Je suis encore en train de tester, j'ai deja réussis mais impossible de retrouver ce f****ng script...
Il me semble que dedans j'utilisais des regex du genre
if($lines =~ /$date/) {
print lines;
}
mais à l'évidence, ce n'était pas ca puisque ca ne fonctionne pas, il m'affiche $lines sans matcher.
j'ai aussi testé ca
$lines2 = $lines =~ /$date/
marche pas non plus...
heuuuuuuuuuu bon je vais surement passer pour un con mais j'ai trouvé mon erreur quand je match, je n'ai pas mis de "m" ce FUCKIN "m"
donc
Si je fais cette erreur bête c'est parce qu'il me semble avoir lu quelque part que dans perl faire m/$pattern/ ou /$pattern/ est la meme chose au niveau du matching.
Donc nouvelle question, cette règle je l'ai inventé ?? ou je confond avec du sed ou un autre langage ?
:(){ :|:& };:
donc
devient
if($lines =~ /$date/) {
print lines;
}
if($lines =~ m/$date/) {
print lines;
}
Si je fais cette erreur bête c'est parce qu'il me semble avoir lu quelque part que dans perl faire m/$pattern/ ou /$pattern/ est la meme chose au niveau du matching.
Donc nouvelle question, cette règle je l'ai inventé ?? ou je confond avec du sed ou un autre langage ?
:(){ :|:& };: