Bonjour à tous,
J'ai un problème que je ne parviens pas à résoudre.
J'ai un fichier qui ressemble à ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
AAAACCCGAAACCGTTTAGCTGT
AAAAACCCGAAACCGTTTAGCTGT
AAAACCCGAAACCGTTTAGCTGTT
AAAACCCGAAACCGTTTAGCTGTTC
AAAACCCGAAACCGTTTAGCTGTTT
AAAACCCGAAACCGTTTAGCTGTTCT
AGAAAAACCCGAAACCGTTTAGCTGT
AAAACCCGAAACCGTTTAGCTGTTCTC
AAAACCCGAAACCGTTTAGCTGTTCTCC
AAAACCCGAAACCGTTTAGCTGTTCTCCG
ATAACCCGAAACCGTTTAGCTGTTCTCCG
Tous les séquences sont rangées par taille et par ordre alphabétique dans mon fichier.

Je souhaite supprimer la redondance en supprimant toutes les séquences contenant entièrement une autre séquences (le début doit être identique )par exemple :
Par exemple, pour la première séquence :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
AAAACCCGAAACCGTTTAGCTGT
j'ai toutes ces séquences :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
AAAACCCGAAACCGTTTAGCTGTT
AAAACCCGAAACCGTTTAGCTGTTC
AAAACCCGAAACCGTTTAGCTGTTT
AAAACCCGAAACCGTTTAGCTGTTCT
AAAACCCGAAACCGTTTAGCTGTTCTC
AAAACCCGAAACCGTTTAGCTGTTCTCC
AAAACCCGAAACCGTTTAGCTGTTCTCCG
Mais je ne souhaite garder que
Code : Sélectionner tout - Visualiser dans une fenêtre à part
AAAACCCGAAACCGTTTAGCTGT
puisque toutes les autres séquences commencent par cette séquence.
A la fin, j'aimerai avoir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
AAAACCCGAAACCGTTTAGCTGT
AAAAACCCGAAACCGTTTAGCTGT
AGAAAAACCCGAAACCGTTTAGCTGT
ATAACCCGAAACCGTTTAGCTGTTCTCCG
J'ai donc écris ce script perl :
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
my ($file_file,$out_file);
my (%hash,%dico);
my (@results,@sort_all_seq,@tmp);
 
GetOptions("file=s" => \$file_file); 
open(my $file,'<',$file_file) or die "$file_file : $!\n\n";
 
while(<$file>){
        chomp;
        push(@sort_all_seq,$_);
}
print "seq in array : OK !\n";
 
my $i=0;
foreach my $value(@sort_all_seq){
	push(@tmp,$value);
	my @dix = grep  { $sort_all_seq[$_] =~ m/^$value/ } 0..$#sort_all_seq ;
	push(@tmp,$value) if(scalar(@dix)>1);
	my $o = 0;
	foreach my $val (@dix) {
    		splice (@sort_all_seq,$val-$o,1);	
		$o++;
 
	}   	
	$i++;	
}
print "tmp : @tmp\n";
qui me retourne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
AAAACCCGAAACCGTTTAGCTGT 
AAAACCCGAAACCGTTTAGCTGT 
AGAAAAACCCGAAACCGTTTAGCTGT
Je pense que cela vient du fait que je modifie à chaque fois mon tableau @sort_all_seq.
Auriez vous une idée pour résoudre mon problème ?
Merci d'avance