8
|
1 #!/usr/bin/perl
|
|
2 # v1.0.1 added log, and two different type of filtering (common / specific)
|
|
3 use strict;
|
|
4 use Getopt::Long;
|
|
5
|
|
6 my $list1_file;
|
|
7 my $list2_file;
|
|
8 my $log_file;
|
|
9 my $NB_COL=1;
|
|
10 my $TYPE = "common";
|
|
11 my %header;
|
|
12 my $nb_list1 = 0;
|
|
13 my $nb_list2 = 0;
|
|
14 my $nb_common = 0;
|
|
15
|
|
16
|
|
17 GetOptions (
|
|
18 "list1_file=s" => \$list1_file,
|
|
19 "list2_file=s" => \$list2_file,
|
|
20 "log_file=s" => \$log_file,
|
|
21 "type=s" => \$TYPE,
|
|
22 "nb_col=i" => \$NB_COL
|
|
23 ) or die("Error in command line arguments\n");
|
|
24
|
|
25 open(L2, $list2_file) or die("Can't open $list2_file\n");
|
|
26 while (my $line=<L2>){
|
|
27 $nb_list2++;
|
|
28 chomp($line);
|
|
29 my @fields = split(/\s+/,$line);
|
|
30 my $ref="";
|
|
31 my $compt=0;
|
|
32 while ($compt<$NB_COL){
|
|
33 if ($ref){$ref.="\t";}
|
|
34 $ref.=$fields[$compt];
|
|
35 $compt++;
|
|
36 }
|
|
37 $header{$ref}=$line;
|
|
38 }
|
|
39 close (L2);
|
|
40
|
|
41
|
|
42 open(L1, $list1_file) or die("Can't open $list1_file\n");
|
|
43 while (my $line=<L1>){
|
|
44 $nb_list1++;
|
|
45 my @fields = split(/\s+/,$line);
|
|
46 my $ref="";
|
|
47 my $compt=0;
|
|
48 while ($compt<$NB_COL){
|
|
49 if ($ref){$ref.="\t";}
|
|
50 $ref.=$fields[$compt];
|
|
51 $compt++;
|
|
52 }
|
|
53 # my $ref = "$fields[0]\t$fields[1]";
|
|
54
|
|
55 if ($header{$ref}){
|
|
56 $nb_common++;
|
|
57 if ($TYPE eq "common"){
|
|
58 print $line;
|
|
59 }
|
|
60 elsif ($TYPE eq "specific") {
|
|
61 }
|
|
62 else {
|
|
63 }
|
|
64 }
|
|
65 else {
|
|
66 if ($TYPE eq "common"){
|
|
67 }
|
|
68 elsif ($TYPE eq "specific") {
|
|
69 print $line;
|
|
70 }
|
|
71 else {
|
|
72 }
|
|
73 }
|
|
74
|
|
75 }
|
|
76 my $nb_list1_only = $nb_list1 - $nb_common;
|
|
77 my $nb_list2_only = $nb_list2 - $nb_common;
|
|
78
|
|
79 close(L1);
|
|
80 open (LF,">$log_file") or die("Can't open $log_file\n");
|
|
81 print LF "\n####\t List Filtering \n";
|
|
82 print LF "#List 1 :\t$nb_list1 ($nb_list1_only)\n";
|
|
83 print LF "#List 2 :\t$nb_list2 ($nb_list2_only)\n";
|
|
84 print LF "#Common :\t$nb_common\n";
|
|
85 close (LF);
|
|
86
|