如果 A 列值在下一行中重复,则删除这两行

如果 A 列值在下一行中重复,则删除这两行

我的输入是这样的:

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   

...因为这样做似乎与您要求的事情相冲突,所以我只能想知道它是否包含在您的示例输出中。

相关内容