J'ai des milliers de fichiers, qui sont une liste de noms de séquences suivis de leur séquence, un individu par ligne, quelque chose comme ceci:
>L.abdalai.LJAMM.14363.SanMartindeLosAndes CCCTAAGAATAATTTGTTCAGAAAAGATATTTAATTATAT >L.carlosgarini.LJAMM.14070.LagunadelMaule CCCTAAGAAT-ATTTGTTCAGAAAAGATATTTAATTATAT >L.cf.silvai.DD.038.Sarco CCCTAAGAAT-ATTTGTTCAGAAAAGATATTTAATTATAT
Et je veux les changer au format fasta , donc quelque chose comme:
L.abdalai.LJAMM.14363.SanMartindeLosAndes CCCTAAGAATAATTTGTT L.carlosgarini.LJAMM.14070.LagunadelMaule CCCTAAGAAT-ATTTGTT L.cf.silvai.DD.038.Sarco CCCTAAGAAT-ATTTGTT
Je travaille sur un Mac.
Merci!
3 Réponses :
Pourriez-vous s'il vous plaît essayer le suivant (créé et testé sur la base de vos échantillons, car je n'ai pas de mac pour ne pas le tester).
>L.abdalai.LJAMM.14363.SanMartindeLosAndes CCCTAAGAATAATTTGTTCAGAAAAGATATTTAATTATAT >L.carlosgarini.LJAMM.14070.LagunadelMaule CCCTAAGAAT-ATTTGTTCAGAAAAGATATTTAATTATAT >L.cf.silvai.DD.038.Sarco CCCTAAGAAT-ATTTGTTCAGAAAAGATATTTAATTATAT
La sortie sera la suivante. Si nécessaire, vous pouvez également le placer dans un fichier_sortie en ajoutant > fichier_sortie
à la commande ci-dessus.
awk '/^L\./{print ">"$1 ORS $2 "CAGAAAAGATATTTAATTATAT"}' Input_file
@Damien Esquerre, pourriez-vous s'il vous plaît me faire savoir si cela vous a aidé?
Utilisation de Perl
$ cat damien.txt L.abdalai.LJAMM.14363.SanMartindeLosAndes CCCTAAGAATAATTTGTT L.carlosgarini.LJAMM.14070.LagunadelMaule CCCTAAGAAT-ATTTGTT L.cf.silvai.DD.038.Sarco CCCTAAGAAT-ATTTGTT $ perl -pe 's/^/</;s/(\S+)\s+(\S+)/$1\n$2CAGAAAAGATATTTAATTATAT/g ' damien.txt <L.abdalai.LJAMM.14363.SanMartindeLosAndes CCCTAAGAATAATTTGTTCAGAAAAGATATTTAATTATAT <L.carlosgarini.LJAMM.14070.LagunadelMaule CCCTAAGAAT-ATTTGTTCAGAAAAGATATTTAATTATAT <L.cf.silvai.DD.038.Sarco CCCTAAGAAT-ATTTGTTCAGAAAAGATATTTAATTATAT $
avec vos entrées
perl -pe 's/^/</;s/(\S+)\s+(\S+)/$1\n$2CAGAAAAGATATTTAATTATAT/g ' file
Je crois que vous avez simplifié votre exemple d'entrée, donc différent de votre résultat attendu.
Si ce n'est pas le cas et que mes solutions ne fonctionnent pas, veuillez commenter sous ma réponse pour me le faire savoir.
Donc avec awk, vous pouvez le faire comme ceci:
sed -e 's/\([^[:space:]]*\)[[:space:]]*\([^[:space:]]*\)/>\1\n\2/' file
Si vous voulez changer en place, veuillez installer GNU gawk, et utilisez gawk -i inplace ....
Et si vous voulez que les fins de ligne soient Chariots , ajoutez / changez en -v ORS = "\ r" -v OFS = "\ r"
Cependant, vous pouvez aussi, et il vaut peut-être mieux le faire avec sed
:
awk -v OFS="\n" '$1=">" $1' file >L.abdalai.LJAMM.14363.SanMartindeLosAndes CCCTAAGAATAATTTGTT >L.carlosgarini.LJAMM.14070.LagunadelMaule CCCTAAGAAT-ATTTGTT >L.cf.silvai.DD.038.Sarco CCCTAAGAAT-ATTTGTT
Ajouter -i '' code > comme ceci:
sed -i '' -e ...
pour changer le fichier en place.
Essayez avec la balise 'awk'
Chaîne 'CAGAAAAGATATTTAATTATAT', d'où elle vient?
Voulez-vous que chaque séquence soit enregistrée dans son propre fichier individuel? Si oui, comment devraient-ils être nommés? Comment sont nommés les milliers de fichiers source?
Salut Shawn, oui, je veux que chaque séquence soit enregistrée dans un fichier séparé. Les noms d'origine sont part1.txt, part2.txt .. et ainsi de suite. Les nouveaux noms peuvent être identiques ou autres, loci1, loci2, etc ...