как удалить конкретное число или букву перед символы (|) использующий grep команда

У меня есть количество N последовательности в файле как это

>668|CAX10446 conserved hypothetical protein 
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRRSSATRATESRSSSRTARGASSGYKEYSPSAAR

>669|CAX10447 conserved protein 
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRRSSATRATESRSSSRTARGASSGYKEYSPSAAR

или как это

>gi|76167242|gb|AAX50250.1| hypothetical protein CTA_0001 
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRR

Теперь, мне нужен a grep команда для удаления конкретного слова или числа в первой строке.

Вывод должен быть:

>CAX10446 conserved hypothetical protein 
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRRSSATRATESRSSSRTARGASSGYKEYSPSAAR

или

>AAX50250.1| hypothetical protein CTA_0001 [Chlamydia trachomatis A/HAR-13]
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRRSSATRAAESRS
SSRTARGASSGYREYSPSAAR

Мне нужна команда grep, чтобы сделать это действие, я использовал sed но это удалило первую строку, идентификатор, таким образом, трудно определить, который последовательность который.

0
задан 28 June 2016 в 14:33

2 ответа

Похоже, что Вы хотите удалить все перед последним | символ. Однако Ваш второй пример имеет | после идентификатора и перед hypothetical protein. По-видимому, в этом случае, Вы хотите удалить все перед последним |, который не сопровождается пространством.

Вот один путь:

$ sed 's/| / /; s/^[^ ]*|/>/' file.pep 
>CAX10446 conserved hypothetical protein 
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRRSSATRATESRSSSRTARGASSGYKEYSPSAAR
>AAX50250.1 hypothetical protein CTA_0001 
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRR

Эти s/| / /; удаляет любой | сопровождаемый пространством. Это удалит | от AAX50250.1|. Эти s/^[^ ]*|/>/ ищет > в начале строки (^>) и удаляет самую длинную строку символов ([^ ]) непространства до последнего | на строке.

2
ответ дан 29 September 2019 в 01:01

Если Вы хотите сделать это с grep. Необходимо считать 3 строки после каждой пустой строки и скопировать ее в переменную. Необходимо сократить последнюю часть переменной.

синтаксический анализатор сделает;

Первый reverse строка

Второй cut строка с | и становится первой

Треть reverse строка

echo $yourstring |rev |cut -d'|' -f1|rev

BTW, который это не удалит, только шоу Вы часть. Если Вы хотите сохранить вывод, перенаправляют его в файл.

echo $yourstring |rev |cut -d'|' -f1|rev > yournewfile
0
ответ дан 29 September 2019 в 01:01

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

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