Sed экстракт с различным рисунком - PullRequest
1 голос
/ 07 апреля 2020

Мой файл выглядит так:

>2011_07_item_1
CCAATACGGGCGCGCAGGCTTTCTATCGCGCGGCCGGCTTCGTCGAGGAC
GGGCGGCGCAAGGATTACTACCGCAGCGGCCAGGGGCGCGAGGACGCGCT
GCTGATGAGCCGCGCGCTGCCATGAGGGAGACACCGATGCCGATCGTCGC
AACCGAGTCGTGGACGCTGGAACTGCCCGAGGAGTGGTCGGCGCAGGAGG
ACGAGGACGTCGTGGTGATCGAGGACGAGGACGGCGTGAGCTGTCTCGAG
ATCTCGGCGCTGGTGCTGGAGAGCGGCGCCGTGGGCGACGAGGATCTGGC
CGAGTTCAGCCGCGATCTTCTCG
>2011_07_item_2
ATATAAACCTTATTCATCGTTTTCAGCCTAATTTTCCATTTAACAGGGAT
GATTTTCGTCAAAATGCTGAGGCTTTACCAAGATTTTCTACCTTGCACCT
TCAGAAAAAAATCATGGCATTTATAGACGAAATTCTCGAGAAACCATCAT
ACGGATGGACGGACGAAAAGGGCAATTTTTACAAACCTTCACCCAAAGAA
CTGATCAAAGAATTTTTCAGTCGCTTGAATGTATTCAAAAACAAAAAGAA
CTGGCTTGCCTTTACTTCATGGGTTTCCATTCTGATCTTATTTCCGTTTT
TCCTTTTGTTTATCTTCAAATACTTT
>2011_07_item_3
...

Я хочу извлечь идентификаторы:

2011_07_item_1
2011_07_item_2
2011_07_item_3

Я пытался использовать sed -n '/>/,/\n/p', но это не работает вообще. Если я использую sed -n '/>/,/[A-Z]/p', я получаю идентификатор и первую строку после:

>2011_07_item_1
CCAATACGGGCGCGCAGGCTTTCTATCGCGCGGCCGGCTTCGTCGAGGAC
>2011_07_item_2
ATATAAACCTTATTCATCGTTTTCAGCCTAATTTTCCATTTAACAGGGAT
>2011_07_item_3

Есть идеи, почему это происходит и как это исправить?

Ответы [ 2 ]

2 голосов
/ 07 апреля 2020

sed - линейно-ориентированный инструмент; он считывает свои входные данные построчно и перед загрузкой каждой строки в пространство шаблона обрезает завершающий символ \n; поэтому /\n/ никогда ничего не будет соответствовать.

Вместо этого сделайте это следующим образом:

sed -n 's/^>//p'

-n подавляет вывод по умолчанию, а s/^>//p пытается удалить > из начало шаблона пространства; в случае успеха выводится результирующая строка.

0 голосов
/ 08 апреля 2020

Вы можете использовать grep с опцией -o:

grep -oP '^>\K.*' file.txt
...