Распечатайте несколько переменная идентификатора в одну строку с идентификаторами и его единственная переменная в строке?

У меня есть файл больше чем с 10 000 записей:

TRINITY_DN4798_c0_g1_i1.p1 GO:0046658
TRINITY_DN4798_c0_g1_i1.p1 GO:0046659
TRINITY_DN4326_c0_g1_i3.p1 GO:0003677|GO:0046983
TRINITY_DN4326_c0_g1_i3.p1 GO:0000977|GO:0045944

Я пытаюсь отредактировать свой файл для сходства с:

TRINITY_DN4798_c0_g1_i1.p1 GO:0046658
TRINITY_DN4798_c0_g1_i1.p1 GO:0046659
TRINITY_DN4326_c0_g1_i3.p1 GO:0003677
TRINITY_DN4326_c0_g1_i3.p1 GO:0046983
TRINITY_DN4326_c0_g1_i3.p1 GO:0000977
TRINITY_DN4326_c0_g1_i3.p1 GO:0045944

Я попытался использовать sed:

cat file | head | sed 's/|/\n/g'| sort -u

но быть произведенным:

GO:0045944
GO:0046983
TRINITY_DN4326_c0_g1_i3.p1 GO:0000977
TRINITY_DN4326_c0_g1_i3.p1 GO:0003677
TRINITY_DN4798_c0_g1_i1.p1 GO:0046658
TRINITY_DN4798_c0_g1_i1.p1 GO:0046659

Нуждаюсь в помощи, спасибо.

1
задан 23 March 2020 в 07:07

2 ответа

Можно попробовать это:

sed -E 's/^(.*)(GO:.*)\|(.*)$/\1\2\n\1\3/'

Вывод:

TRINITY_DN4798_c0_g1_i1.p1 GO:0046658
TRINITY_DN4798_c0_g1_i1.p1 GO:0046659
TRINITY_DN4326_c0_g1_i3.p1 GO:0003677
TRINITY_DN4326_c0_g1_i3.p1 GO:0046983
TRINITY_DN4326_c0_g1_i3.p1 GO:0000977
TRINITY_DN4326_c0_g1_i3.p1 GO:0045944
1
ответ дан 7 April 2020 в 23:30

Один способ использовать awk:

awk -F"[ |]" '{print $1 OFS $2}$3{print $1 OFS $3}' file

Пространство использующего разделения и канал как разделитель. Таким образом, Вы заканчиваете тем, что получили 3 маркера. Распечатайте 1-й и 2-й. Каждый раз, когда 3-й присутствует, печать, 1-я и 3-я.

0
ответ дан 7 April 2020 в 23:30

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

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