Изменение заголовков FASTA с помощью инструментов командной строки Unix

Я снова застрял с изменением текста. Я хочу изменить большие текстовые файлы, такие как эти:

>hg19_ct_UserTrack_3545_691 range=chr1:8121498-8121502 5'pad=0 3'pad=0 strand=+ repeatMasking=none
GATGG
>hg19_ct_UserTrack_3545_690 range=chr1:8121587-8121591 5'pad=0 3'pad=0 strand=+ repeatMasking=none
GATAG

to

>chr1:8121498-8121502 5'pad=0 3'pad=0 strand=+ repeatMasking=none
GATGG
>chr1:8121587-8121591 5'pad=0 3'pad=0 strand=+ repeatMasking=none
GATAG

Я использовал sed '/^>/s/[^ ]* />/', который удаляет первую часть (>hg19_ct_UserTrack_3545_690), но я действительно застрял в том, как удалить range=. Я пробовал разные комбинации // и grep, но безрезультатно.

Спасибо


person user1879573    schedule 01.03.2013    source источник


Ответы (2)


попробуйте эту строку:

sed 's/[^=>]*=//' file

тест с вашим вводом:

kent$  echo ">hg19_ct_UserTrack_3545_691 range=chr1:8121498-8121502 5'pad=0 3'pad=0 strand=+ repeatMasking=none
GATGG
>hg19_ct_UserTrack_3545_690 range=chr1:8121587-8121591 5'pad=0 3'pad=0 strand=+ repeatMasking=none
GATAG"|sed 's/[^=>]*=//'
>chr1:8121498-8121502 5'pad=0 3'pad=0 strand=+ repeatMasking=none
GATGG
>chr1:8121587-8121591 5'pad=0 3'pad=0 strand=+ repeatMasking=none
GATAG
person Kent    schedule 01.03.2013

Попробуйте эти различные команды оболочки =)

С awk:

awk -F'range=' '/^>/{print ">" $2}' file

Или с помощью sed :

 sed '/^>/s/.*range=(.*)/>\1/' file
person Gilles Quenot    schedule 01.03.2013
comment
Они не работают правильно, так как пропускают символ ›. awk и GNU grep с регулярным выражением Perl также будут пропускать строки, отличные от ›... - person Scrutinizer; 01.03.2013
comment
пост отредактирован соответственно. Неправильно понял ваш вопрос, извините ;) - person Gilles Quenot; 01.03.2013
comment
Вы, вероятно, sed -E для BSD sed или GNU sed (или sed -r для GNU sed) для ERE ... - person Scrutinizer; 01.03.2013