Salut TLM

je rentre au sujet, j'ai un Script qui dois me faire la différence entre deux colonnes, chacune de ses colonnes dans un fichier, donc sa sera la différence entre deux fichier basé sur une colonne de donné pareille

utilisation :
./Script.pl file1.txt num_col_f1 separ_f1 file2.txt num_col_f2 separ_f2

- quand les separateur separ & et separ 2 sont blanc, le Script marche, pour le cas où les deux sépar sont diférents de blanc, le Script ne marche pas,

le Code :
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186

#!/usr/bin/perl 

# le Script est pour la différence entre deux fichiers de plusieurs colonnes

use strict;

sub usage () {
              print STDERR "\nUsage: $0 file1.txt num_col_f1 sep_f1 file2.txt num_col_f2 sep_f2\n";
              print STDERR "Version: 1.0\n";
              exit(1);
             }

if ( (scalar @ARGV != 4) and (scalar @ARGV != 5) and (scalar @ARGV != 6) )  
              {
               print STDERR "Error: this script need 4 arguments if Separator-Column est un espace, 5 if separator is not space for one File, 6 arguments if two separator for the files\n";
               usage();
              }

my %ALL;
my %ALL2;
my $i=0; my $j=0;
my $nb_ligne1;
my $nb_ligne2;
my $nb_ligne3;
my $nb_ligne4;
my $val;
my $num_col_f1;
my $num_col_f2;
my $num_col_f3;
my $num_col_f4;
my $sep_f1;
my $sep_f2;
my $sep_f3;
my $sep_f4;
my @tab;
my @col_1;
my @col_2;
my @col_3;
my @col_4;
my $val_f1;
my $val_f2;
my $val_f3;
my $val_f4;
my $name_file1;
my $name_file2;
my $name_file3;
my $name_file4;

if ( (scalar @ARGV == 4) )  
	{  
	 open FILE1, "< $ARGV[0]" or die "Can't open file $ARGV[0]: $!";
     open FILE2, "< $ARGV[2]" or die "Can't open file $ARGV[2] $!"; 
     open FILE3, "< $ARGV[2]" or die "Can't open file $ARGV[2]: $!";
     open FILE4, "< $ARGV[0]" or die "Can't open file $ARGV[0]: $!"; 
	 $name_file1 = $ARGV[0];
	 $num_col_f1 = $ARGV[1] - 1;
	 
	 $name_file2 = $ARGV[2];
	 $num_col_f2 = $ARGV[3] - 1;
     
	 $name_file3 = $ARGV[2];
     $num_col_f3 = $ARGV[3] - 1;

	 $name_file4 = $ARGV[0];
     $num_col_f4 = $ARGV[1] - 1;
     }
if ( (scalar @ARGV == 5)  and ($ARGV[2] != /\s/) ) 
	{
	 open FILE1, "< $ARGV[0]" or die "Can't open file $ARGV[0]: $!";
     open FILE2, "< $ARGV[3]" or die "Can't open file $ARGV[3] $!"; 
     open FILE3, "< $ARGV[3]" or die "Can't open file $ARGV[3]: $!";
     open FILE4, "< $ARGV[0]" or die "Can't open file $ARGV[0]: $!"; 
	 $name_file1 = $ARGV[0];
	 $num_col_f1 = $ARGV[1] - 1;
     $sep_f1     = $ARGV[2];

	 $name_file2 = $ARGV[3];
	 $num_col_f2 = $ARGV[4] - 1;
     
	 $name_file3 = $ARGV[3];
     $num_col_f3 = $ARGV[4] - 1;

	 $name_file4 = $ARGV[0];
     $num_col_f4 = $ARGV[1] - 1;
	 $sep_f4     = $ARGV[2];
     }
if ( (scalar @ARGV == 5)  and ($ARGV[5] != /\s/) )  
	{
	 open FILE1, "< $ARGV[0]" or die "Can't open file $ARGV[0]: $!";
     open FILE2, "< $ARGV[2]" or die "Can't open file $ARGV[2] $!"; 
     open FILE3, "< $ARGV[2]" or die "Can't open file $ARGV[2]: $!";
     open FILE4, "< $ARGV[0]" or die "Can't open file $ARGV[0]: $!"; 
	 $name_file1 = $ARGV[0];
	 $num_col_f1 = $ARGV[1] - 1;
     
	 $name_file2 = $ARGV[3];
	 $num_col_f2 = $ARGV[4] - 1;
	 $sep_f2     = $ARGV[5];
     
	 $name_file3 = $ARGV[3];
     $num_col_f3 = $ARGV[4] - 1;
	 $sep_f3     = $ARGV[5];

	 $name_file4 = $ARGV[0];
     $num_col_f4 = $ARGV[1] - 1;
    }

if  ( scalar @ARGV == 6 )
    {
	 open FILE1, "< $ARGV[0]" or die "Can't open file $ARGV[0]: $!";
     open FILE2, "< $ARGV[3]" or die "Can't open file $ARGV[3]: $!"; 
     open FILE3, "< $ARGV[3]" or die "Can't open file $ARGV[3]: $!";
     open FILE4, "< $ARGV[0]" or die "Can't open file $ARGV[0]: $!"; 
	 $name_file1 = $ARGV[0];
	 $num_col_f1 = $ARGV[1] - 1;
	 $sep_f1     = $ARGV[2];
     
	 $name_file2 = $ARGV[3];
	 $num_col_f2 = $ARGV[4] - 1;
	 $sep_f2     = $ARGV[5];
     
	 $name_file3 = $ARGV[3];
     $num_col_f3 = $ARGV[4] - 1;
	 $sep_f3     = $ARGV[5];

	 $name_file4 = $ARGV[0];
     $num_col_f4 = $ARGV[1] - 1;
	 $sep_f4     = $ARGV[2];
	}
while ( <FILE1> )
{   chomp;
    next if( $_ =~ m/^$/o );
    if ( scalar @ARGV == 4 ) { @col_1 = split; }
	if ((scalar @ARGV == 5 ) and ($ARGV[2] != /\s/)) { @col_1 = split(/$sep_f1/, $_) }; 
    if ( scalar @ARGV == 6 ) { @col_1 = split(/$sep_f1/, $_)};
	
	$val_f1 = $col_1[$num_col_f1]; 
	$i++; 
    $ALL{$val_f1} = $i;
}
while ( <FILE2> )
{   chomp;
    next if( $_ =~ m/^$/o );
    if ( scalar @ARGV == 4 ) { @col_2 = split; }
	if ((scalar @ARGV == 5 ) and ($ARGV[5] != /\s/)) { @col_2 = split(/$sep_f2/, $_) }; 
	if ( scalar @ARGV == 6 ) { @col_2 = split(/$sep_f2/, $_)};
	
    $val_f2 = $col_2[$num_col_f2];
	if ( not defined $ALL{$val_f2} )
                {
                  print STDERR "\n--->>>>> Valeur $val_f2 existe sur le fichier $name_file2, mais pas sur le fichier $name_file1 !!!\n";
				 }                
}
print STDERR "\n--->>>>> and :\n";
while ( <FILE3> )
{   chomp;
    next if( $_ =~ m/^$/o );
    if ( scalar @ARGV == 4 ) { @col_3 = split; }
	if ((scalar @ARGV == 5 ) and ($ARGV[5] != /\s/)) { @col_3 = split(/$sep_f3/, $_) }; 
	if ( scalar @ARGV == 6 ) { @col_3 = split(/$sep_f3/, $_)};
	
	$val_f3 = $col_3[$num_col_f3]; 
    $j++; 
    $ALL2{$val_f3} = $j;
}
while ( <FILE4> )
{   chomp;
    next if( $_ =~ m/^$/o );
    if ( scalar @ARGV == 4 ) { @col_4 = split; }
	if ((scalar @ARGV == 5 ) and ($ARGV[2] != /\s/)) { @col_4 = split(/$sep_f4/, $_) }; 
    if ( scalar @ARGV == 6 ) { @col_4 = split(/$sep_f4/, $_) ;}; 
	
    $val_f4 = $col_4[$num_col_f4];
	if ( not defined $ALL2{$val_f4} ) 
                { 
				  print STDERR "\n--->>>>> Valeur $val_f4 existe sur le fichier $name_file4, mais pas sur le fichier $name_file3 !!!\n";
				  }
}

close (FILE1);
close (FILE2);
close (FILE3);
close (FILE4);
exit(0);
exemple, Fichier 1:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
603014,603014022375163
603012,603012020080258
603011,603011020013069
603013,603013021826196
603014,603014022035474
603012,603012020175349
603012,603012020175369
603012,603012020175379
fichier 2:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
603014022375163,6030140223
603012020080257,6030120200
603011020013069,6030110200
603013021826196,6030130218
603014022035474,6030140220
603012020175348,6030120201
Exécution et résultat :
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
$ ./diff_2files.pl source.txt 1 ',' sortie.txt 2 ','

 existe sur le fichier sortie.txt, mais pas sur le fichier source.txt !!!

 existe sur le fichier sortie.txt, mais pas sur le fichier source.txt !!!

 existe sur le fichier sortie.txt, mais pas sur le fichier source.txt !!!

 existe sur le fichier sortie.txt, mais pas sur le fichier source.txt !!!

 existe sur le fichier sortie.txt, mais pas sur le fichier source.txt !!!

 existe sur le fichier sortie.txt, mais pas sur le fichier source.txt !!!

 existe sur le fichier sortie.txt, mais pas sur le fichier source.txt !!!

 existe sur le fichier sortie.txt, mais pas sur le fichier source.txt !!!

--->>>>> and :

--->>>>> Valeur 603014022375163 existe sur le fichier source.txt, mais pas sur le fichier sortie.txt !!!

--->>>>> Valeur 603012020080257 existe sur le fichier source.txt, mais pas sur le fichier sortie.txt !!!

--->>>>> Valeur 603011020013069 existe sur le fichier source.txt, mais pas sur le fichier sortie.txt !!!

--->>>>> Valeur 603013021826196 existe sur le fichier source.txt, mais pas sur le fichier sortie.txt !!!

--->>>>> Valeur 603014022035474 existe sur le fichier source.txt, mais pas sur le fichier sortie.txt !!!

--->>>>> Valeur 603012020175348 existe sur le fichier source.txt, mais pas sur le fichier sortie.txt !!!
je trouve pas de solution, et désolé car le CODE du Script est trop long (pas au goût pure Perl, mais j'ai tout mis, lol