パターンで始まる重複行と次の行を削除する方法は?

パターンで始まる重複行と次の行を削除する方法は?

>次の行で始まる重複行を削除したいと思います。

たとえば、

>1
ACCGGTTTCCTTGAAATT
>2 
AACCTTCCGGTTAATT
>3 
AACCTTCCGGTTAATT
>1 
ACCGGTTTCCTTGAAATT

ご覧のとおり、次の2行が重複しています。

AACCTTCCGGTTAATT and >1 

しかし、次の行だけを削除したい>1ので、出力は次のようになります。

>1
ACCGGTTTCCTTGAAATT
>2
AACCTTCCGGTTAATT
>3
AACCTTCCGGTTAATT

私が次のようなものを使用している場合:

awk '!seen[$0]++'  filename

出力は次のとおりです

>1
ACCGGTTTCCTTGAAATT
>2
AACCTTCCGGTTAATT
>3

>すべての重複行を削除し、その後の次の行から始まる重複行のみを削除したいからです。

私の実際のファイルは約数千行なので、>シンボルの後に複数の繰り返し可能な名前があるかもしれません。

どんな提案がありますか?

ベストアンサー1

getline次の行を取得するには、awkで使用できます。

awk '/^>/{ if(!seen[$0]++){ print;getline;print } else { getline } }'

複数行を処理するより簡単な答えがあります。

awk '/^>/{ skip = seen[$0]++ }
     { if(!skip)print }'

おすすめ記事