У меня есть файл больше чем с 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
Нуждаюсь в помощи, спасибо.
Можно попробовать это:
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
Один способ использовать awk:
awk -F"[ |]" '{print $1 OFS $2}$3{print $1 OFS $3}' file
Пространство использующего разделения и канал как разделитель. Таким образом, Вы заканчиваете тем, что получили 3 маркера. Распечатайте 1-й и 2-й. Каждый раз, когда 3-й присутствует, печать, 1-я и 3-я.