This is a test version of Biostars. For the public version, visit https://www.biostars.org.
Remove part of a header in a fasta file

Hi I need help writing a command to remove part of a header from my scaffold fasta file. I have headers that look like

>scaffold3247|size3454
TTATATAACTAATTAGATAAAATAGCTAATAATAAAAGCTTCTATATAACTAGCCTTCTTTTAATCTATATAATAAGCTTAGCTAATAAAAAGGCCCACT
TTTTTTTCCA

>scaffold11172|size823
GCTCAGCATGCCGTTGCCAACGCCGCGGGCGCTCATTTGCTGCAATCCAGCCGCCTTATTCCTGCTGCTGTCCTTGAGAGCCACGAGCCGGCCACCGTTG
ACAAACGTCTGGAACCGTAACCCAGACTCAGGCCCTTTGTAAGGCAGAGGCAGGAGCATGTTGACACTCCCGGCTGCGAAAAGATCACCACCAACAGCGT
CTTGACCATCGTGAGGCCCCAGC

and i need to get rid of the |size part

so

>scaffold3247
TTATATAACTAATTAGATAAAATAGCTAATAATAAAAGCTTCTATATAACTAGCCTTCTTTTAATCTATATAATAAGCTTAGCTAATAAAAAGGCCCACT
TTTTTTTCCA

>scaffold111
GCTCAGCATGCCGTTGCCAACGCCGCGGGCGCTCATTTGCTGCAATCCAGCCGCCTTATTCCTGCTGCTGTCCTTGAGAGCCACGAGCCGGCCACCGTTG
ACAAACGTCTGGAACCGTAACCCAGACTCAGGCCCTTTGTAAGGCAGAGGCAGGAGCATGTTGACACTCCCGGCTGCGAAAAGATCACCACCAACAGCGT
CTTGACCATCGTGAGGCCCCAGC

I am a novice at this so I am sure there is a way to use awk or sed but I am quite lost! Any help would be greatly appreciated!

fasta

I have fasta sequences example

>scaffold_71454_ 
TTATATAACTAATTAGATAAAATAGCTAATAATAAAAGCTTCTATATAACTAGCCTTCTTTTAATCTATATAATAAGCTTAGCTAATAAAAAG
>scaffold_72823_ 
GCTCAGCATGCCGTTGCCAACGCCGCGGGCGCTCATTTGCTGCAATCCAGCCGCCTTATTCCTGCTGCTGTCCTTGAGAGCCAC

How to clean '_' at the end of header line?

On on hand this should be a new question, on the other, formatting fasta headers is about the common question here. You might either find the solution or learn some regular expressions in sed. Hint: s/_$// in the above command should do the trick.

3 answers

A simple cut command could do it:

cut -d'|' -f1 input.fa > output.fa

Or you could use sed: sed 's/|.*//' input.fa > output.fa

Or if you would like to use awk:-

awk '/^>/{gsub(/\|size[0-9]+/,"",$0)}1' input.fasta >output.fasta

Log in to answer this question.