Bonjour à tous,

J'avais déjà posté concernant mon problème mais le bug du forum l'a effacé... du coup je retente ma chance !

J'ai en entrée un fichier fasta se présentant sous la forme:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
>segment749_1 
SSGAKRSSRGSRDFSWAAYRFHATSANRNAVEPTSSEVWIWV*RH*ESNPSTIPAIAS
RSASTVEISAARDCMSTSSSRLAAPNPLPTPGPT*SMWEGRTGVVSSIAVAKRFASFA
TGASRRQTLGSQPSFVRLVSSTVSDSRLMTSAALSARASAQDRRTTAGTRRRPWWGSF
DSLPRAPVRSR*RSPRSSKRGTRAS*RRWAW*CCGQCTSLGSRWRRLARPSAWIARSG
PTCCTTTATTSGRL*STLRGVPKRTTPWLHISWELLHSEPSEAYAMARATSGCIC*WS
YIHLSPCSAQTYT**ARSSVWPQTCGARARNRSHPGPVAYRRVS*RSEGCCAGRWRR*
PR*RRSRWAQLLARWRRDRRSRGARSSGQTGGRRAR*GCSRTSSGTGARHRCASRPDR
PQSRRGTRSTRCSERAT*RPRWRNAPTRSPPTPSRCGRHGAASRGTTRGALLHGVPF*
GATAPRCTPVRTSGATCSR*PRSHSPSRSRR*
on y voit notamment plein d'étoiles partout que je souhaite enlever... chaque séquence entre les étoiles correspond à un cadre de lecture, cette séquence pouvant se situer sur 2 lignes ou plus ou alors sur 3 lettres (en bleu)... il y a aussi des cadres qui ne donnent rien d'où le ** (en vert)...




J'ai écrit un script en 2 temps et j'aimerais savoir si vous auriez des idées pour transformer les 2 parties en 1...

1ère étape:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
 
foreach my $line (@file){
 
   if ($line =~ /\>/)
   {$line =~ s/\>/\n\>/g;}      # ajoute un retour à la ligne sinon on a un problème par la suite
   else
   {
   $line =~ s/\n//g;             #remplace le retour à la ligne par rien car on a des séquences sur plusieurs lignes
   $line =~ s/\*\*/\*/g;      # remplace les ** par une seule car on a pas de séquence
   $line =~ s/\*/\n/g;          # remplace toutes les * par un retour à la ligne qui permet de visualiser chaque séquence
	}
    print $out $line;
}
pour obtenir:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
>segment749_1 
SSGAKRSSRGSRDFSWAAYRFHATSANRNAVEPTSSEVWIWV
RH
ESNPSTIPAIASRSASTVEISAARDCMSTSSSRLAAPNPLPTPGPT
SMWEGRTGVVSSIAVAKRFASFATGASRRQTLGSQPSFVRLVSSTVSDSRLMTSAALSARASAQDRRTTAGTRRRPWWGSFDSLPRAPVRSR
RSPRSSKRGTRAS
RRWAW
CCGQCTSLGSRWRRLARPSAWIARSGPTCCTTTATTSGRL
STLRGVPKRTTPWLHISWELLHSEPSEAYAMARATSGCIC
WSYIHLSPCSAQTYT
ARSSVWPQTCGARARNRSHPGPVAYRRVS
2ème étape
avec un print foreach line..

J'obtiens:

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
>segment749_1 _ORF_1
SSGAKRSSRGSRDFSWAAYRFHATSANRNAVEPTSSEVWIWV
>segment749_1 _ORF_2
RH
>segment749_1 _ORF_3
ESNPSTIPAIASRSASTVEISAARDCMSTSSSRLAAPNPLPTPGPT
>segment749_1 _ORF_4
SMWEGRTGVVSSIAVAKRFASFATGASRRQTLGSQPSFVRLVSSTVSDSRLMTSAALSARASAQDRRTTAGTRRRPWWGSFDSLPRAPVRSR
>segment749_1 _ORF_5RSPRSSKRGTRAS
>segment749_1 _ORF_6
RRWAW
>segment749_1 _ORF_7
CCGQCTSLGSRWRRLARPSAWIARSGPTCCTTTATTSGRL
>segment749_1 _ORF_8
STLRGVPKRTTPWLHISWELLHSEPSEAYAMARATSGCIC
>segment749_1 _ORF_9
WSYIHLSPCSAQTYT
>segment749_1 _ORF_10
ARSSVWPQTCGARARNRSHPGPVAYRRVS
>segment749_1 _ORF_11
RSEGCCAGRWRR
Donc voilà !! Merci d'avance pour vos conseils