3
|
1 #!/usr/bin/perl
|
|
2
|
|
3 use strict;
|
|
4
|
|
5 my $file = $ARGV[0];
|
|
6 my $out = $ARGV[1];
|
|
7
|
|
8 my %h;
|
|
9 open(F,$file);
|
|
10 while(<F>){
|
|
11 my @infos = split(/\t/,$_);
|
|
12 if ($infos[2] eq 'CDS' && /Name=([^;]*);/){
|
|
13 my $id = $1;
|
|
14 $h{$id}++;
|
|
15 }
|
|
16 }
|
|
17 close(F);
|
|
18
|
|
19 my %dup;
|
|
20 foreach my $id(keys(%h)){
|
|
21 my $n = $h{$id};
|
|
22 if ($n > 1){
|
|
23 $dup{$id} = 1;
|
|
24 }
|
|
25 }
|
|
26 open(O,">$out");
|
|
27 open(F,$file);
|
|
28 while(<F>){
|
|
29 my @infos = split(/\t/,$_);
|
|
30 if ($infos[2] eq 'CDS' && /Name=([^;]*);/){
|
|
31 my $id = $1;
|
|
32 if ($dup{$id}){next;}
|
|
33 }
|
|
34 if ($infos[2] eq 'mRNA' && /Parent=([^;]*);/){
|
|
35 my $id = $1;
|
|
36 if ($dup{$id}){next;}
|
|
37 }
|
|
38 if ($infos[2] eq 'gene' && /ID=([^;]*);/){
|
|
39 my $id = $1;
|
|
40 if ($dup{$id}){next;}
|
|
41 }
|
|
42 if ($infos[2] eq 'exon' && /Parent=([^;]*);/){
|
|
43 my ($id,$extension) = split(/\./,$1);
|
|
44 if ($dup{$id}){next;}
|
|
45 }
|
|
46 print O $_;
|
|
47
|
|
48 }
|
|
49 close(F);
|
|
50 close(O);
|