#1 Le 15/09/2023, à 15: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, à 13:31)
Hors ligne
#2 Le 15/09/2023, à 16: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.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 15/09/2023, à 16: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, à 05:45
- nany
Re : [résolu]diviser un fichier fasta en plusieurs
Bonjour,
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, à 06: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, à 09: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, à 13:31
- viviane2023
Re : [résolu]diviser un fichier fasta en plusieurs
super ça marche!
Hors ligne