Bonjour à tous,
Je suis confrontée à un problème que je n'arrive pas à résoudre.
J'ai un fichier qui ressemble à cela :
Code :
Sélectionner tout - Visualiser dans une fenêtre à part
Je souhaiterai trouver la séquence la plus petite que toutes ces séquences partagent entre elle (en gras dans mon exemple), et donc la seule séquence que j'aimerai récupérer est la seq 8 et seq14
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 >seq1 ACTTTCCACAACGATGGAAGATGATGA >seq2 ACTTTCCACAACGATGGAAGATGATGAA >seq3 ATTCCACAACGATGGAAGATGATGAA >seq4 CTTTCCACAACGATGGAAGATGATGAA >seq5 NTCCACAACGATGGAAGATGATGAAGA >seq6 TACTTTCCACAACGATGGAAGATGATGA >seq7 TACTTTCCACAACGATGGAAGATGATGAA >seq8 TCCACAACGATGGAAGATGATGA >seq9 AAAGAAGAAATTGAATAAATATATGTC >seq10 AAAGAAGAAATTGAATAAATATATGT >seq11 AAAGAAGAAATTGAATAAATATATGTCA >seq12 AAAGAAGAAATTGAATAAATATAT >seq13 AAAGAAGAAATTGAATAAATATATG >seq14 AAAGAAGAAATTGAATAAATATA
>seq8
TCCACAACGATGGAAGATGATGA
>seq14
AAAGAAGAAATTGAATAAATATA
Quelqu'un aurait une idée ? Une suggestion ?
J'ai fait ceci, mais ca ne fonctionne pas :
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 #!/usr/bin/perl use strict; use warnings; use Carp qw(confess); use Getopt::Long; use List::MoreUtils qw(uniq); use Bio::SeqIO; my %hash; my ($fasta_file,$out_file); GetOptions("fasta=s" => \$fasta_file,"out=s" => \$out_file); open(my $out,'>',$out_file) or die "$out_file : $!\n\n"; my $in = Bio::SeqIO->new( -file => $fasta_file, '-format' => 'Fasta' ); # read file in hash while ( my $seq = $in->next_seq()){ my $id = $seq->id() ; my $sequence = $seq->seq ; $hash{$sequence}=$id; } my @all_seq=keys (%hash); # @seq contient toutes les sequences my @uniqueseq; my $find=0; foreach my $seqs (@all_seq){ $find=0; my $seq=uc($seqs); #uppercase foreach (@uniqueseq){ if ($_=~/$seq/){ # si ma sequence contient $_=$seq; #remplace avec la plus petite sequence $find=1; } } if ($find==0){ push @uniqueseq,$seq; } } foreach (@uniqueseq){ print ">$hash{$_}\n$_\n"; }
Partager