Shell
如果 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 列中)重複,則刪除兩行。
你可以這樣做
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
…因為這樣做似乎與您要求的東西相衝突,所以我只能想知道它是否包含在您的範例輸出中。