Bonjour à tous,
Je suis en train de dév un script en perl 5.x qui va me permettre de comparer deux fichiers de zones dans deux vues différentes (vue 1, vue2). Je dois répéter cette opération X fois, X étant le nombre de fichiers de zones à traiter.
Je dois effectuer les actions suivantes :
- Pour les enregistrements qui sont strictement pareils dans la zone1 de la vue1 et de la vue2, je dois créer un fichier zone1 qui va lister l'ensemble des lignes exactement pareilles.
- Pour les enregistrements qui ne sont que dans la zone1 de la vue1, je dois créer un fichier zone1 qui va lister les enregistrements uniques de cette zone de la vue1
- Pour les enregistrements qui ne sont que dans la zone1 de la vue2, je dois faire comme le point du dessus
Pour les traitements ci-dessus je ne rencontre aucun problème particulier, je boucle sur un fichier en greppant chaque ligne dans le second et ça fonctionne très bien.
Enfin ce qui me pose problème :
- Pour les enregistrements qui sont similaires mais PAS IDENTIQUES dans la zone1 de la vue1 ET dans la zone1 de la vue2.
Un exemple OK :
(zone1 - vue1)test.test.fr IN A 1.1.1.1
(zone1 - vue2)test.test.fr IN A 2.2.2.2
Un exemple NOK :
(zone1 - vue1)test.test.fr IN A 2.2.2.2
(zone1 - vue2)test.test.fr IN A 2.2.2.2
J'ai vraiment du mal à imaginer comment m'en sortir. J'étais parti du principe qu'il y a plus de lignes exactement identiques qu'autre chose du coup j'en suis arrivé à ce bout de code :
Je suis pas loin d'avoir ce que je veux mais il me faudrait dans le même temps la ligne qui est similaire dans la vue2, dans ce bout de code je n'ai que les enregistrements de la vue1
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 sub similarity { for ($i = 0 ; $i < scalar(@list_files) ; $i++) { chomp($list_files[$i]); system "touch similarity/$list_files[$i]"; print "Fichier de zone : $list_files[$i]\n"; # Récupération des lignes du premier fichier open(FILE,"<","vue1/$list_files[$i]"); @lines = <FILE>; close(FILE); # Ouverture du fichier final open(FILE,">","similarity/$list_files[$i]"); # Boucle sur les lignes du premier fichier foreach(@lines) { chomp($_); system("grep '$_' vue2/$list_files[$i]"); if ($? != 0) { # Récupération des enregistrements qui ne sont pas identiques if ($_ =~ m/(.*[[:space:]]*[0-9]*IN.[A-Z]*)/) { push @similarities, $_; push @remaining, $1; } } } # Boucle sur les enregistrements restants => ceux qui sont forcément différents / similaires for($j = 0 ; $j < scalar(@remaining) ; $j++) { chomp($remaining[$j]); system("grep '$remaining[$j]' vue2/$list_files[$i]"); if ($? == 0) { print FILE "$similarities[$j]\n"; } } } }
Merci d'avance pour votre aide![]()
Partager