как переименовать заголовки файлов fasta с помощью sed

я знаю, что это довольно легко, но я не могу заставить его работать. Я пытаюсь переименовать заголовок, используя sed, и хотя выражение reg работает, но я не могу переименовать заголовок fasta. Вот небольшой пример. У меня есть файл Fasta с несколькими последовательностями, как показано ниже.

>Bra000001
CTTATTTTCTCCTTCACCACCGTACCACAGAAAAAAACTGTGATTTTAAA
AGCCACATTTACTTCTTTTTTTGTTGGGTCTAAATGTTAAAATAACATGT
>Bra000002
TTTATGTAGTACTGGACTAATCGGGTAGGGAAACAATCTTGATTTAGCAA
TACAGTGTAATAACTAATAATCATATTCATATTCCATAAATCCAAATGTT

Теперь я просто хочу добавить «Brassica rapa» в конце заголовка Fasta, как это

>Bra000001 Brassica rapa
CTTATTTTCTCCTTCACCACCGTACCACAGAAAAAAACTGTGATTTTAAA
AGCCACATTTACTTCTTTTTTTGTTGGGTCTAAATGTTAAAATAACATGT
>Bra000002 Brassica rapa
TTTATGTAGTACTGGACTAATCGGGTAGGGAAACAATCTTGATTTAGCAA
TACAGTGTAATAACTAATAATCATATTCATATTCCATAAATCCAAATGTT

Я делаю это, чтобы заставить его работать

grep ">" in.fa | sed 's/$/ Brassica rapa/' > out.fa

Однако, делая это, я могу изменить только заголовки, но не информацию о последовательности. В идеале я хочу изменить заголовок и сохранить последовательность как есть.


person upendra    schedule 24.04.2014    source источник


Ответы (3)


Вы можете использовать только sed с замещающей командой, проверяя если строка начинается с символа >, сгруппируйте всю строку и добавьте свою строку в конце, например:

sed 's/^\(>.*\)$/\1 Brassica rapa/' infile

Это дает:

>Bra000001 Brassica rapa
CTTATTTTCTCCTTCACCACCGTACCACAGAAAAAAACTGTGATTTTAAA
AGCCACATTTACTTCTTTTTTTGTTGGGTCTAAATGTTAAAATAACATGT
>Bra000002 Brassica rapa
TTTATGTAGTACTGGACTAATCGGGTAGGGAAACAATCTTGATTTAGCAA
TACAGTGTAATAACTAATAATCATATTCATATTCCATAAATCCAAATGTT
person Birei    schedule 24.04.2014
comment
Это может быть немного проще: sed '/^>/ s/$/ Brassica rapa/' -- для строк, начинающихся с >, измените конец строки на заданную строку. Или, как у вас, без скобок: sed 's/^>.*/& Brassica rapa' -- где & заменяется соответствующим текстом. - person glenn jackman; 25.04.2014
comment
Спасибо все заработало. У меня есть вопрос. Работает ли группировка «sed» так же, как группировка «R»? - person upendra; 25.04.2014
comment
@glennjackman: Хорошие альтернативы. Вероятно, они оба быстрее, чем мои. - person Birei; 25.04.2014
comment
@upendra: я не знаю о R. Я не могу помочь с этим. Извиняюсь. - person Birei; 25.04.2014

awk делает это красиво и просто.

awk '/^>/ {$0=$0 " Brassica rapa"}1' in.fa >out.fa
>Bra000001 Brassica rapa
CTTATTTTCTCCTTCACCACCGTACCACAGAAAAAAACTGTGATTTTAAA
AGCCACATTTACTTCTTTTTTTGTTGGGTCTAAATGTTAAAATAACATGT
>Bra000002 Brassica rapa
TTTATGTAGTACTGGACTAATCGGGTAGGGAAACAATCTTGATTTAGCAA
TACAGTGTAATAACTAATAATCATATTCATATTCCATAAATCCAAATGTT
person Jotne    schedule 25.04.2014
comment
Джотн, можешь мне сказать, для чего там цифра "1"? Я попытался удалить его, и это не сработало, и когда я изменил его на другие числа, такие как «2» и «3» (просто чтобы убедиться, что он существует для группировки, аналогичной awk выше), он работал независимо. - person upendra; 26.04.2014
comment
@upendra Это наиболее часто используемая команда в awk. Когда у вас есть число от 1и выше, это будет настоящая проверка, и вы выполните действие по умолчанию print, поэтому 1 = 1 {print} = 1 {print $0} - person Jotne; 26.04.2014

person    schedule
comment
извините за дублированный ответ, еще не читал комментарий Гленна Джекмана к ответу Бирея, когда публиковал мой - person NeronLeVelu; 25.04.2014