列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次の2行を印刷しません。

pak_c28265_g1_i3|m.9595     TIGRFAM
pak_c28265_g1_i3|m.9595     Pfam   

...これを行うと、要求された内容と競合するように見えるので、その内容がサンプル出力に含まれているかどうか疑問に思います。

関連情報