Bonjour à tous,
J'ai un problème que je ne parviens pas à résoudre.
J'ai un fichier qui ressemble à ceci :
Tous les séquences sont rangées par taille et par ordre alphabétique dans mon fichier.
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
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 :
j'ai toutes ces séquences :
Code : Sélectionner tout - Visualiser dans une fenêtre à part AAAACCCGAAACCGTTTAGCTGT
Mais je ne souhaite garder que
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 AAAACCCGAAACCGTTTAGCTGTT AAAACCCGAAACCGTTTAGCTGTTC AAAACCCGAAACCGTTTAGCTGTTT AAAACCCGAAACCGTTTAGCTGTTCT AAAACCCGAAACCGTTTAGCTGTTCTC AAAACCCGAAACCGTTTAGCTGTTCTCC AAAACCCGAAACCGTTTAGCTGTTCTCCG
puisque toutes les autres séquences commencent par cette séquence.
Code : Sélectionner tout - Visualiser dans une fenêtre à part AAAACCCGAAACCGTTTAGCTGT
A la fin, j'aimerai avoir :
J'ai donc écris ce script perl :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 AAAACCCGAAACCGTTTAGCTGT AAAAACCCGAAACCGTTTAGCTGT AGAAAAACCCGAAACCGTTTAGCTGT ATAACCCGAAACCGTTTAGCTGTTCTCCG
qui me retourne :
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";
Je pense que cela vient du fait que je modifie à chaque fois mon tableau @sort_all_seq.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 AAAACCCGAAACCGTTTAGCTGT AAAACCCGAAACCGTTTAGCTGT AGAAAAACCCGAAACCGTTTAGCTGT
Auriez vous une idée pour résoudre mon problème ?
Merci d'avance
Partager