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:
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)...
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*
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:
pour obtenir:
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; }
2ème étape
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
avec un print foreach line..
J'obtiens:
Donc voilà !! Merci d'avance pour vos conseils
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
Partager