Extraire une chaîne d'un fichier à partir des chaînes autour
Résolu
Pat@
-
zipe31 Messages postés 36402 Date d'inscription Statut Contributeur Dernière intervention -
zipe31 Messages postés 36402 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai un petit souci d'extraction de chaîne de caractères dans un fichier contenant des séquences nucléiques. Mon fichier (format FASTA) se présente de la façon suivante :
>scaffold14
TGGGTC[...]
[...]
[...]CCACCC
>scaffold7
ATG...
...TAG
>scaffold8
...
etc.
Autrement dit, une ligne indiquant le numéro du scaffold, puis des lignes ne contenant que les caractères A, T, C, G et N et qui font toutes 60 caractères (sauf éventuellement la dernière), puis un nouveau scaffold.
Ce que j'aimerais extraire, ce sont les lignes de séquences d'un scaffold particulier, et uniquement celui-ci. Autrement dit, tous les caractères entre la ligne '>scaffold475' et la prochaine ligne '>scaffold[0-9]+'. Les lignes de commande que j'ai utilisées, notamment avec sed, ont mis plusieurs retours à la ligne à la fin du fichier, comme si plusieurs scaffolds avaient été embarqués.
(La commande :
Je me doute que ce que je demande est assez basique (surtout que si le fichier était plus petit je pourrais faire un copier-coller sans souci ^^' ), mais c'est un peu frustrant de ramer là-dessus...
Merci de votre lecture
J'ai un petit souci d'extraction de chaîne de caractères dans un fichier contenant des séquences nucléiques. Mon fichier (format FASTA) se présente de la façon suivante :
>scaffold14
TGGGTC[...]
[...]
[...]CCACCC
>scaffold7
ATG...
...TAG
>scaffold8
...
etc.
Autrement dit, une ligne indiquant le numéro du scaffold, puis des lignes ne contenant que les caractères A, T, C, G et N et qui font toutes 60 caractères (sauf éventuellement la dernière), puis un nouveau scaffold.
Ce que j'aimerais extraire, ce sont les lignes de séquences d'un scaffold particulier, et uniquement celui-ci. Autrement dit, tous les caractères entre la ligne '>scaffold475' et la prochaine ligne '>scaffold[0-9]+'. Les lignes de commande que j'ai utilisées, notamment avec sed, ont mis plusieurs retours à la ligne à la fin du fichier, comme si plusieurs scaffolds avaient été embarqués.
(La commande :
sed -n '/scaffold475/,/scaffold/{//d;p}' monfichier.fa > masortie.fa)
Je me doute que ce que je demande est assez basique (surtout que si le fichier était plus petit je pourrais faire un copier-coller sans souci ^^' ), mais c'est un peu frustrant de ramer là-dessus...
Merci de votre lecture
A voir également:
- Extraire une chaîne d'un fichier à partir des chaînes autour
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Extraire une video youtube - Guide
1 réponse
Salut,
C'est bizarre cette histoire de retours à la ligne ;-\
Normalement ta syntaxe sed devrait bien faire le boulot comme tu le décris, la preuve :
Quel est le format de ton fichier d'entrée ? (Dos ou Unix)
C'est bizarre cette histoire de retours à la ligne ;-\
Normalement ta syntaxe sed devrait bien faire le boulot comme tu le décris, la preuve :
$ cat plop
>scaffold14
TGGGTC[...]
[...]
[...]CCACCC
>scaffold7
ATG...
...TAG
>scaffold8
AATG...
...TAGG
AACCGG
<scaffold10
TAGG
AACC
$ sed -n '/^>scaffold7/,/^>scaffold/{//d;p}' plop
ATG...
...TAG
$
Quel est le format de ton fichier d'entrée ? (Dos ou Unix)
Ou alors mon fichier initial contient des retours à la ligne mal placés au sein des scaffolds, ce qui est normalement bien peu probable mais expliquerait mon problème, tout en rendant ma question caduque ! ^^
Ce qui est étrange c'est que les chiffres supplémentaires (comme le 1 de 4751) n'ont pas été ajoutés au fichier de sortie.
Mon problème est donc résolu, mais si quelqu'un saurait répondre à ces deux questions :
Et merci de ton coup de main zipe31 ! ;-)
Bonne question, et je n'ai pas la réponse ;-\