我的输入是这样的:
pak_c35079_g1_i1|m.14890 Pfam
pak_c20797_g1_i1|m.3458 ProDom
pak_c20797_g1_i1|m.3458 Pfam
pak_c28265_g1_i3|m.9595 TIGRFAM
pak_c28265_g1_i3|m.9595 Pfam
.
.
.
我想要这样的输出:
pak_c35079_g1_i1|m.14890 Pfam
pak_c28265_g1_i3|m.9595 TIGRFAM
pak_c28265_g1_i3|m.9595 Pfam
这意味着如果某个值在下一行(A 列)中重复,则删除这两行。
答案1
你可以这样做awk
:
awk 'BEGIN {last=""; last_line=""} { if (last == $1) {} else {print last_line} last=$1; last_line = $0}' < file_to_proceed
我不是awk
专家,你会遇到最后一行的问题......
答案2
sed '$!N;/^\([^ ]* \).*\n\1/d;P;D' <in >out
它不会处理三连续相同的第一个字段 - 但这似乎不是你所要求的,无论如何。
鉴于您的示例输入,我的输出与您的示例输出略有不同:
pak_c35079_g1_i1|m.14890 Pfam
上面的命令sed
不会打印这两行:
pak_c28265_g1_i3|m.9595 TIGRFAM
pak_c28265_g1_i3|m.9595 Pfam
...因为这样做似乎与您要求的事情相冲突,所以我只能想知道它是否包含在您的示例输出中。