Добавление текста к существующей первой строке с помощью Sed

У меня есть данные, которые выглядят так (формат FASTA). Обратите внимание, что in поставляется с блоком из 2 заголовков ">" и последовательностью.

>SRR018006
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGN
>SRR018006
ACCCGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

Что я хочу сделать, так это добавить текст (например, «foo» в заголовок >), что даст:

>SRR018006-foo
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGN
>SRR018006-foo
ACCCGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

Есть ли способ сделать это с помощью SED? Предпочтительно встроенное изменение исходного файла.


person neversaint    schedule 13.10.2009    source источник


Ответы (2)


Это сделает то, что вы ищете.

sed -ie 's/^\(>.*\)/\1-foo/' file
person EmFi    schedule 13.10.2009

поскольку, судя по вашему предыдущему сообщению, вы также имеете опыт использования awk: вот решение awk.

# awk '/^>/{print $0"-foo";next}1' file
>SRR018006-foo
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNGN
>SRR018006-foo
ACCCGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

# awk '/^>/{print $0"-foo";next}1' file > temp
# mv temp file

если вы настаиваете на sed

# sed -e '/^>/s/$/-foo/' file
person ghostdog74    schedule 13.10.2009
comment
Несмотря на ваш негативный тон, я бы сказал, что ваше предложение с sed намного чище, чем два других, использующих awk, и, вероятно, намного эффективнее. - person Idelic; 14.10.2009