Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/09/2023, à 16:31

viviane2023

[résolu]diviser un fichier fasta en plusieurs

Bonjour,

j'ai un fichier fasta qui contient plus 3900 séquences et j'aimerai blaster ces fichiers contre la base de données des nucléotides sur NCBI mais le fichier est trop lourd, du coup je voudrais diviser mon fichier en plusieurs fichiers.

est ce que vous avez une idée de comment spliter mon fichier fasta ?

Viviane2023

Dernière modification par viviane2023 (Le 18/09/2023, à 14:31)

Hors ligne

#2 Le 15/09/2023, à 17:17

Watael

Re : [résolu]diviser un fichier fasta en plusieurs

salut,

as-tu des règles pour split* ce fichier ?

--
* ceci est ma réponse, sinon. wink


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 15/09/2023, à 17:31

gl38

Re : [résolu]diviser un fichier fasta en plusieurs

Dans wikipedia, il y a une description des fichiers fasta.
Chaque séquence commence par le caractère > suivi de l'identifiant et de commentaires.
wikipedia dit

pour une lecture humaine plus aisée des fichiers, il est recommandé d'insérer une ligne vide entre la fin de la séquence et signe ">" suivant. 

Est-ce le cas chez toi ?
Cordialement,
Guy

Hors ligne

#4 Le 16/09/2023, à 06:45

nany

Re : [résolu]diviser un fichier fasta en plusieurs

Bonjour,



Watael a écrit :

as-tu des règles pour split* ce fichier ?

--
* ceci est ma réponse, sinon.

J’ai cherché avec split sans y parvenir* (mauvaise lecture du man ?) à fragmenter chaque séquence dans un fichier d’un sous-répertoire :

fic="gros_fichier.fasta" ; [ -d "$fic.d" ] && rm "$fic.d/fragment_"* || mkdir "$fic.d" ; split -t'>' -l1 -a4 --numeric-suffixes=1 --additional-suffix=.fasta "$fic" "$fic.d/fragment_"

* Le caractère « > » se trouve mal placé.



Alors j’ai choisi awk pour parvenir à une solution :

awk -v fic="gros_fichier.fasta" -v n=0 'BEGIN{system("[ -d "fic".d ] && rm "fic".d/fragment_* || mkdir "fic".d")} />/{close(out); n=n+1; out=sprintf("%s%s_%04.0f%s", fic, ".d/fragment", n, ".fasta")} /^$/{next} {print >> out}' gros_fichier.fasta

Remplacer toutes les occurences « gros_fichier.fasta » par le vrai nom du fichier.




Bon, ça va générer 3900 et quelques fichiers d’une seule séquence mais, en l’absence de précisions quant à la façon de diviser, c’est tout ce que j’ai trouvé.






P.S. : on peut aussi faire un post-traitement après le split.

fic="gros_fichier.fasta" ; [ -d "$fic.d" ] && rm "$fic.d/"* || mkdir "$fic.d" ; split -t'>' -l10 -a4 --numeric-suffixes=1 --additional-suffix=.fasta "$fic" "$fic.d/fragment_" ; sed -ri '/^$|^>$/d;1{s/^[^>]/>/}' "$fic.d/"*

Là j’ai coupé toutes les dix séquences, c’est sans doute mieux.

Hors ligne

#5 Le 18/09/2023, à 07:46

viviane2023

Re : [résolu]diviser un fichier fasta en plusieurs

Bonjour à tous,
je voudrais diviser les 3900 séquences sur 6 fichiers histoires de pouvoir les passer sans problème sur NCBI.

Hors ligne

#6 Le 18/09/2023, à 10:50

nany

Re : [résolu]diviser un fichier fasta en plusieurs

Bonjour,



Dans ce cas essaie ma dernière ligne de commandes en remplaçant « -l10 » par « -l650 » et en supprimant « -a4 » :

fic="gros_fichier.fasta" ; [ -d "$fic.d" ] && rm "$fic.d/"* || mkdir "$fic.d" ; split -t'>' -l650 --numeric-suffixes=1 --additional-suffix=.fasta "$fic" "$fic.d/fragment_" ; sed -ri '/^$|^>$/d;1{s/^[^>]/>/}' "$fic.d/"*

Note : pour plus de lisibilité, cette ligne peut être décomposée en plusieurs ;

fic="gros_fichier.fasta"
[ -d "$fic.d" ] && rm "$fic.d/"* || mkdir "$fic.d"
split -t'>' -l650 --numeric-suffixes=1 --additional-suffix=.fasta "$fic" "$fic.d/fragment_"
sed -ri '/^$|^>$/d;1{s/^[^>]/>/}' "$fic.d/"*

Et bien sûr il faut toujours remplacer « gros_fichier.fasta » par le bon nom de fichier.

Hors ligne

#7 Le 18/09/2023, à 14:31

viviane2023

Re : [résolu]diviser un fichier fasta en plusieurs

super ça marche! big_smile

Hors ligne