将一个 ID 的多个变量打印到一行中,并将 ID 和其单个变量打印在一行中?

将一个 ID 的多个变量打印到一行中,并将 ID 和其单个变量打印在一行中?

我有一个包含超过 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

您可以尝试以下操作:

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

答案2

使用 awk 的一种方法:

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

使用空格和竖线作为分隔符进行拆分。因此您最终会得到 3 个标记。打印第 1 个和第 2 个。只要存在第 3 个,就打印第 1 个和第 3 个。

相关内容