-
grep en Perl
Bonjour a tous,
Je souhaite filtrer toutes les lignes d'un log a travers un fichier X ou sont toutes les lignes que je reconnait. La facon de le faire est de prendre chaque ligne du log et de verifier a chaque fois si elle fait partie du fichier de ligne que je connais (fichier X), dans le cas ou je ne la connait pas (qu'elle n'est pas dans mon fichier X) je la copie dans un fichier Z, et ainsi de suite.
Le grep que j'utilise est le suivant:
if (! (scalar grep {$line =~ /$_/sgi} @fichier_X) { ... copy $line dans Z }
Cette operation marche tres bien mais sur une grosse quantite de logs est trop longue.
1- On m'a conseille d'utiliser un grep system (en linux) ce qui raccourcierait enormement l'operation, est ce que qqun pourrait me dire comment faire ceci??
2- Est que a part ca il y a une possibilite d'optimiser l'operation ?
Merci
-
Je ne pense pas que le grep system accélère l'opération tant que cela, par contre tu peux faire beaucoup mieux en Perl, selon le contenu de ton fichier X. Si ton fichier X contient les lignes exactes à supprimer (ou même s'il est possible de corriger les éventuelles petites différences par une simple opération de normalisation), il est sans doute possible de passer d'une complexité en O(n*m) à une complexité en O(n). Et même si ce n'est pas le cas, utiliser Regexp::Assemble permettra sûrement d'améliorer les choses.
--
Jedaï