Bonjours a toutes et a tous,
voila j'ai un léger souci avec une regexp en perl.
je doit parcourir un fichier de log, et y extraire quelques information, jusque la pas de problème
ensuite est grâce a une table de hash je repère quelques info, et les converti en texte.
table de hash
La table de hash n'est ici qu'un extrait, elle est créer a partir d'un fichier plat csv
Code : Sélectionner tout - Visualiser dans une fenêtre à part %corres = { '.1.3.6.1.4.1.2011.6.3.23.6.0' => 'hwConfigLockOperate' };
je parcours donc ma table de hash et cherche a matcher les correspondances de mon fichier
Fichier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 my @tmp = split (/\|/,$_); foreach my $info (@tmp) { foreach my $h (keys(%corres)) { if ($info =~ /^$h(.*)$/) { print "\t".$corres{$h}." => ".$1."\n"; } } }
Le probleme c'est que certain OID, sont tres proches exemple :OID|.1.3.6.1.4.1.2011.5.100.1.1.1.5.1.3.4194337024.32|.1.3.6.1.4.1.2011.5.100.1.1.1.5.1.5.4194337024.32|.1.3.6.1.4.1.2011.5.100.1.1.1.5.1.14.4194337024.32|.1.3.6.1.4.1.2011.5.100.1.1.1.5.1.26.4194337024.32|.1.3.6.1.4.1.2011.5.100.1.1.1.5.1.25.4194337024.32
OID|.1.3.6.1.4.1.2011.5.100.1.1.1.5.1.3.4194337024.32|.1.3.6.1.4.1.2011.5.100.1.1.1.5.1.5.4194337024.32|.1.3.6.1.4.1.2011.5.100.1.1.1.5.1.14.4194337024.32|.1.3.6.1.4.1.2011.5.100.1.1.1.5.1.26.4194337024.32|.1.3.6.1.4.1.2011.5.100.1.1.1.5.1.25.4194337024.32
OID|.1.3.6.1.4.1.2011.5.100.1.1.1.47.1.1.4194337024.32|.1.3.6.1.4.1.2011.5.100.1.1.1.47.1.2.4194337024.32
OID|.1.3.6.1.4.1.2011.6.3.23.6.0|.1.3.6.1.4.1.2011.6.3.23.2.0
OID|.1.3.6.1.4.1.2011.5.100.1.1.1.12.1.6.4194337024.4294967295
OID|.1.3.6.1.4.1.2011.5.100.1.1.1.13.1.3.4194337024.32.835.47
OID|.1.3.6.1.4.1.2011.5.14.5.2.1.2.4294967295
dans ce cas, si la valeur .1.3.6.1.4.1.2011.5.14.5.2.1.20, il ne matchera que .1.3.6.1.4.1.2011.5.14.5.2.1.2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 .1.3.6.1.4.1.2011.5.14.5.2.1.2 .1.3.6.1.4.1.2011.5.14.5.2.1.20
Il serait possible de réfléchir a l'inverse, et de chercher a matcher directement dans le fichier, et a faire la correspondance, mais les OID du fichier de log, n'ont pas la meme taille (nb de point), les valeurs concatener apres les OID (ex :4194337024.32.835.47) ne sont pas les meme, et n'ont pas la meme taille
Donc ma question est, est-il possible de forcer a matcher au mieux, a savoir trouver la correspondance la plus proche, dans mon exemple, le .1.3.6.1.4.1.2011.5.14.5.2.1.20 au lieu du .1.3.6.1.4.1.2011.5.14.5.2.1.2.
ou sinon y a t il une autre façon de voir les choses a laquelle je n'aurais évidement pas pensé.
Merci d'avance
Partager