This is a test version of Biostars. For the public version, visit https://www.biostars.org.
Multiline fasta to single line

Hi all,

I'm trying to convert my multiline fasta in a single line fasta.

My input file is like this (I put only the first lines, but they are many more):

>sample1
gttaatgtagcttaaacccaaagcaaggcactgaaaatgcctagatgagtacaccaactc
cataaacacataggtttggtcccagccttcctgtttactttcaataggcctacacatgca
agcatccacgccccggtgagtaacaccctccaaatcaacaagactaagaggagtaggtat
caagcacacatcctgtagctcataacacctcgcccaaccacacccccacgggagacagca
gtgacaaaaattaagccataaacgaaagtttgactaagccatattgattagggttggtaa
atctcgtgccagccaccgcggtcatacgattaacccgagctaacaggaatacggcgtaaa

And the desired output would be this:

>sample1
gttaatgtagcttaaacccaaagcaaggcactgaaaatgcctagatgagtacaccaactccataaacacataggtttggtcccagccttcctgtttactttcaataggcctacacatgcaagcatccacgccccggtgagtaacaccctccaaatcaacaagactaagaggagtaggtatcaagcacacatcctgtagctcataacacctcgcccaaccacacccccacgggagacagcagtgacaaaaattaagccataaacgaaagtttgactaagccatattgattagggttggtaaatctcgtgccagccaccgcggtcatacgattaacccgagctaacaggaatacggcgtaaa

I tried this command, but it give me the same file as the input, that menas a multiline fasta

awk '{if(NR==1) {print $0} else {if($0 ~ /^>/) {print "\n"$0} else {printf $0}}}' input.fa > output.fa

I also tried several other commands, but they don't work..why?

multilne singleline fasta
# https://github.com/lh3/seqtk/    
seqtk seq *.fasta

1 answer

tr -d '\r' < input.fasta | awk '/^>/ {printf("%s%s\t",(N>0?"\n":""),$0);N++;next;} {printf("%s",$0);} END {printf("\n");}'  | tr "\t" "\n"

the first tr is just in case your file comes from windows. see how to linearize a fasta file

Log in to answer this question.