Bonjour,
J'ai a réaliser un filtre en perl pour le système syslog.
J'ai en entrée un fichier .conf et un fichier .analyse et en sortie un fichier .tmp et .debug.
Je voudrais réaliser la chose suivante: le script test une par une les ligne de .analyse et .conf et si une ligne de .conf et une sous-chaine de .analyse la ligne de .analyse est mise dans un fichier debug. Sinon elle est mise dans un fichier .tmp:
exemple concret:
analyse
Apr 22 10:59:22 vmonitor Server Administrator: line
Apr 22 10:58:49 vmonitor ntpd: ntpd 4.2.0a@1.1190-r Thu Oct 5 04:11:32 E
Apr 22 10:58:49 vmonitor ntpd: precision = 18.000 usec
Apr 22 10:58:49 vmonitor ntpd: Listening on interface wildcard, 0.0.0.0#1
Apr 22 10:58:49 vmonitor ntpd: Listening on interface wildcard, ::#123
Apr 22 10:58:49 vmonitor ntpd: Listening on interface lo, 127.0.0.1#123
Apr 22 10:58:49 vmonitor ntpd: Listening on interface eth0, 172.16.15.39#
.conf
ntpd: precision
ntpd: Listening on
ntpd: ntpd
Avec ce script:
J'obtient:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 open CONF,"$confFile" or die "E/S : $!\n"; open ANALYSE,"$fileAnalyse" or die "E/S : $!\n"; open TMP,">$fileTmp" or die "E/S : $!\n"; open DEBUG,">$fileDebug" or die "E/S : $!\n"; my @conf=<CONF>; chomp @conf; while(my $e=<ANALYSE>){ print DEBUG "$e"; print TMP $e unless grep { $e=~ m/$_/i; if($e=~ m/$_/i){ print DEBUG "Filtré par $_\n\n"; } } } @conf; }
.tmp
RIEN alors qu'on devrait avoir : Apr 22 10:59:22 vmonitor Server Administrator: line
.debug
RIEN alors qu'on devrait avoir:
Apr 22 10:58:49 vmonitor ntpd: precision = 18.000 usec
Apr 22 10:58:49 vmonitor ntpd: Listening on interface wildcard, 0.0.0.0#1
Apr 22 10:58:49 vmonitor ntpd: Listening on interface wildcard, ::#123
Apr 22 10:58:49 vmonitor ntpd: Listening on interface lo, 127.0.0.1#123
Apr 22 10:58:49 vmonitor ntpd: Listening on interface eth0, 172.16.15.39#
Quelqu'un saurait d'où cela peut provenir.
Cet exemple est copié mot pour mot de mon fichier
Partager