Редактирование заголовка текстового файла (формат Fasta)

Это заголовок формата fasta

>KRH76248 pep chromosome:Glycine_max_v2.1:1:47401227:47414434:-1 gene:GLYMA_01G141900 transcript:KRH76248 gene_biotype:protein_coding transcript_biotype:protein_coding description:hypothetical protein
MQKGREVRDNNIFEPRRFEDFGDFGFHRSRMPSLFGGRDPFDDPFFTDPFDSLFGPSSAS
RAMQKTNREKGIVIEEIDSDDEGADNGPETGEKDFDKKKSKSTMEPSIEYPDDDVNERKN
SDVTYKNDHCMAEPKARKFSFQTSRVTYGGIDGAYYTSTRIRRMGANGEVMEENKEADTT
TGQASHRRITRGIHDKGHSVLRKLDSDGKVDTTQTLHNLNEDELAGFEEAWKGNNMAQLP
GFDVHRKEGTMLT

Из этого я хочу сохранить только> GLYMA_01G141900 последовательности и оставшуюся часть необходимо удалить.

Ожидаемый результат

>GLYMA_01G141900
MQKGREVRDNNIFEPRRFEDFGDFGFHRSRMPSLFGGRDPFDDPFFTDPFDSLFGPSSAS
RAMQKTNREKGIVIEEIDSDDEGADNGPETGEKDFDKKKSKSTMEPSIEYPDDDVNERKN
SDVTYKNDHCMAEPKARKFSFQTSRVTYGGIDGAYYTSTRIRRMGANGEVMEENKEADTT
TGQASHRRITRGIHDKGHSVLRKLDSDGKVDTTQTLHNLNEDELAGFEEAWKGNNMAQLP
GFDVHRKEGTMLT

У меня 85000 тысяч различных последовательностей с другим заголовком. Итак, как действовать в командной строке. Заранее благодарю

За помощью нашел одну команду

sed -r '/>/S/.\gene:(.) transcript:.*/>\1/'test.fa
2
задан 30 April 2020 в 18:33

3 ответа

Другое решение с использованием tr и awk:

tr -d '\n' < inputfile | awk -F':'  '{OFS="\n";print $7,$11}' | tr -d 'a-z' > outputfile
0
ответ дан 19 June 2020 в 21:44

Возможно, вы хотите, чтобы

sed -E '/^>/s/.* gene:(\S+).*/>\1/' file

-E и -r были эквивалентно, но я предпочитаю -E , поскольку он соответствует той же опции grep.

\ S + - это «один или несколько непробельных символов» в GNU sed.

2
ответ дан 19 June 2020 в 21:44
  1. сначала избавьтесь от искусственных маркеров «конца строки» в вашем файле (я назвал их необработанными):

    кот сырой | tr -d '\ n'

  2. Я заметил, что для удобства каждая запись начинается с символа> (т. е. прямоугольной скобки). Поэтому я использовал их для пометки новой строки '\ n'

    tr ">" "\ n"

  3. , теперь каждая запись находится на одной строке. Первая строка пуста. Чтобы удалить это, я использовал команду sed:

    sed '/ ^ [[: space:]] * $ / d'

  4. Теперь мы готовы использовать awk. Нужно прочитать каждую запись (строку) и извлечь то, что мы хотим. В каждой записи 11 полей. Для удобства снова Поля разделяются символом ':', следовательно, -F ':' опция ниже:

    awk -F ':' '{OFS = "\ n"; print $ 7, $ 11}'

1
ответ дан 19 June 2020 в 21:44

Другие вопросы по тегам:

Похожие вопросы: