Remove everything after and including a tab in FASTA header?

Viewed 39

I am trying to keep only the first field identifier for each sequence in a .fasta file that looks like this:

>hetGla3    ENST00000215754.179
ATGCCGATGTTCGTCTTGAACACCAACGTGCCCCGCGCCTCTGTGCCGGACGGGTTCCTCTCCGAGCTCACCCAGCAGCTGGCGCAGGCCACTGGCAAGCCGGCCCAGTATATCGCAGTGCACGTGGTCCCGGACCAGCTCATGACCTTCGCGGGCTCATCCGAGCCCTGCGCGCTCTGCAGCCTGCACAGCATCGGCAAGATAGGCGGCGTTCAGAATCGCTCGTACAGCAAGCTGCTGTGTGGCCTGCTGGCGGAGCGCCTGCGTATCAGTCCGGACAGGATCTACATCAACTACTACGACATGAATGCGGCCAATGTGGGCTGGAACGGCTCCACCTTCGCTNNN
>musMus10   ENST00000215754.270
ATGCCTATGTTCATCGTGAACACCAATGTTCCCCGCGCCTCCGTGCCAGAGGGGTTTCTGTCGGAGCTCACCCAGCAGCTGGCGCAGGCCACCGGCAAGCCCGCACAGTACATCGCAGTGCACGTGGTCCCGGACCAGCTCATGACTTTTAGCGGCACGAACGATCCCTGCGCCCTCTGCAGCCTGCACAGCATCGGCAAGATCGGTGGTGCCCAGAACCGCAACTACAGTAAGCTGCTGTGTGGCCTGCTGTCCGATCGCCTGCACATCAGCCCGGACCGGGTCTACATCAACTATTACGACATGAACGCTGCCAACGTGGGCTGGAACGGTTCCACCTTCGCTNNN

I want to remove the \tab and "ENST..." identifier after it, returning:

>hetGla3
ATGCCGATGTTCGTCTTGAACACCAACGTGCCCCGCGCCTCTGTGCCGGACGGGTTCCTCTCCGAGCTCACCCAGCAGCTGGCGCAGGCCACTGGCAAGCCGGCCCAGTATATCGCAGTGCACGTGGTCCCGGACCAGCTCATGACCTTCGCGGGCTCATCCGAGCCCTGCGCGCTCTGCAGCCTGCACAGCATCGGCAAGATAGGCGGCGTTCAGAATCGCTCGTACAGCAAGCTGCTGTGTGGCCTGCTGGCGGAGCGCCTGCGTATCAGTCCGGACAGGATCTACATCAACTACTACGACATGAATGCGGCCAATGTGGGCTGGAACGGCTCCACCTTCGCTNNN
>musMus10
ATGCCTATGTTCATCGTGAACACCAATGTTCCCCGCGCCTCCGTGCCAGAGGGGTTTCTGTCGGAGCTCACCCAGCAGCTGGCGCAGGCCACCGGCAAGCCCGCACAGTACATCGCAGTGCACGTGGTCCCGGACCAGCTCATGACTTTTAGCGGCACGAACGATCCCTGCGCCCTCTGCAGCCTGCACAGCATCGGCAAGATCGGTGGTGCCCAGAACCGCAACTACAGTAAGCTGCTGTGTGGCCTGCTGTCCGATCGCCTGCACATCAGCCCGGACCGGGTCTACATCAACTATTACGACATGAACGCTGCCAACGTGGGCTGGAACGGTTCCACCTTCGCTNNN

I have already tried sed to remove all whitespaces from headers, but it doesn't appear to be working (returns the original format):

sed 's/\.[^\.]*//'

Any help would be greatly appreciated! Thank you.

3 Answers

Using GNU sed

$ sed -E '/^>/s/( +|\t).*//' input_file
>hetGla3
ATGCCGATGTTCGTCTTGAACACCAACGTGCCCCGCGCCTCTGTGCCGGACGGGTTCCTCTCCGAGCTCACCCAGCAGCTGGCGCAGGCCACTGGCAAGCCGGCCCAGTATATCGCAGTGCACGTGGTCCCGGACCAGCTCATGACCTTCGCGGGCTCATCCGAGCCCTGCGCGCTCTGCAGCCTGCACAGCATCGGCAAGATAGGCGGCGTTCAGAATCGCTCGTACAGCAAGCTGCTGTGTGGCCTGCTGGCGGAGCGCCTGCGTATCAGTCCGGACAGGATCTACATCAACTACTACGACATGAATGCGGCCAATGTGGGCTGGAACGGCTCCACCTTCGCTNNN
>musMus10
ATGCCTATGTTCATCGTGAACACCAATGTTCCCCGCGCCTCCGTGCCAGAGGGGTTTCTGTCGGAGCTCACCCAGCAGCTGGCGCAGGCCACCGGCAAGCCCGCACAGTACATCGCAGTGCACGTGGTCCCGGACCAGCTCATGACTTTTAGCGGCACGAACGATCCCTGCGCCCTCTGCAGCCTGCACAGCATCGGCAAGATCGGTGGTGCCCAGAACCGCAACTACAGTAAGCTGCTGTGTGGCCTGCTGTCCGATCGCCTGCACATCAGCCCGGACCGGGTCTACATCAACTATTACGACATGAACGCTGCCAACGTGGGCTGGAACGGTTCCACCTTCGCTNNN

Another option could be capturing the first part without spaces in group 1 and match the rest of the line that should be removed.

In the replacement use capture group 1 using \1

sed -E 's/^(>[^[:space:]]+)[[:space:]].*/\1/' file

The pattern matches:

  • ^ Start of string
  • (>[^[:space:]]+) Capture group 1, match > and 1+ non spaces using a negated character class
  • [[:space:]] Match a single space
  • .* Match the rest of the line

Output

>hetGla3
ATGCCGATGTTCGTCTTGAACACCAACGTGCCCCGCGCCTCTGTGCCGGACGGGTTCCTCTCCGAGCTCACCCAGCAGCTGGCGCAGGCCACTGGCAAGCCGGCCCAGTATATCGCAGTGCACGTGGTCCCGGACCAGCTCATGACCTTCGCGGGCTCATCCGAGCCCTGCGCGCTCTGCAGCCTGCACAGCATCGGCAAGATAGGCGGCGTTCAGAATCGCTCGTACAGCAAGCTGCTGTGTGGCCTGCTGGCGGAGCGCCTGCGTATCAGTCCGGACAGGATCTACATCAACTACTACGACATGAATGCGGCCAATGTGGGCTGGAACGGCTCCACCTTCGCTNNN
>musMus10
ATGCCTATGTTCATCGTGAACACCAATGTTCCCCGCGCCTCCGTGCCAGAGGGGTTTCTGTCGGAGCTCACCCAGCAGCTGGCGCAGGCCACCGGCAAGCCCGCACAGTACATCGCAGTGCACGTGGTCCCGGACCAGCTCATGACTTTTAGCGGCACGAACGATCCCTGCGCCCTCTGCAGCCTGCACAGCATCGGCAAGATCGGTGGTGCCCAGAACCGCAACTACAGTAAGCTGCTGTGTGGCCTGCTGTCCGATCGCCTGCACATCAGCCCGGACCGGGTCTACATCAACTATTACGACATGAACGCTGCCAACGTGGGCTGGAACGGTTCCACCTTCGCTNNN

If awk is also an option, you can print field 1 if the line starts with >, else you print the whole line.

awk '/^>/ {print $1;next}1' file

This is the job that cut exists to do:

$ cut -f1 file
>hetGla3
ATGCCGATGTTCGTCTTGAACACCAACGTGCCCCGCGCCTCTGTGCCGGACGGGTTCCTCTCCGAGCTCACCCAGCAGCTGGCGCAGGCCACTGGCAAGCCGGCCCAGTATATCGCAGTGCACGTGGTCCCGGACCAGCTCATGACCTTCGCGGGCTCATCCGAGCCCTGCGCGCTCTGCAGCCTGCACAGCATCGGCAAGATAGGCGGCGTTCAGAATCGCTCGTACAGCAAGCTGCTGTGTGGCCTGCTGGCGGAGCGCCTGCGTATCAGTCCGGACAGGATCTACATCAACTACTACGACATGAATGCGGCCAATGTGGGCTGGAACGGCTCCACCTTCGCTNNN
>musMus10
ATGCCTATGTTCATCGTGAACACCAATGTTCCCCGCGCCTCCGTGCCAGAGGGGTTTCTGTCGGAGCTCACCCAGCAGCTGGCGCAGGCCACCGGCAAGCCCGCACAGTACATCGCAGTGCACGTGGTCCCGGACCAGCTCATGACTTTTAGCGGCACGAACGATCCCTGCGCCCTCTGCAGCCTGCACAGCATCGGCAAGATCGGTGGTGCCCAGAACCGCAACTACAGTAAGCTGCTGTGTGGCCTGCTGTCCGATCGCCTGCACATCAGCCCGGACCGGGTCTACATCAACTATTACGACATGAACGCTGCCAACGTGGGCTGGAACGGTTCCACCTTCGCTNNN
Related