Shell

如果 A 列的值在下一行重複,則刪除這兩行

  • December 22, 2015

我的輸入是這樣的:

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 列中)重複,則刪除兩行。

你可以這樣做awk

awk 'BEGIN {last=""; last_line=""} { if (last == $1) {} else {print last_line} last=$1; last_line = $0}' < file_to_proceed

我不是awk專家,最後一行會有問題…

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   

…因為這樣做似乎與您要求的東西相衝突,所以我只能想知道它是否包含在您的範例輸出中。

引用自:https://unix.stackexchange.com/questions/250575