パターンの周りの改行文字を削除

パターンの周りの改行文字を削除

次のように、何百万ものペアを構成するシーケンスを含むファスタファイルがあります。

>7001289F:56:HKH3FBCXX:2:1101:1692:2074 1:N:0:CGATGT
GAGCAGAGGCACCGCTGAGCAGACAGCGAGCGAGTGAAGGGGTCAGGGGCCAGTCAGCAATCTCGTGTAGAAAGAATCACGGTCGAGCGGTGCACGCATG
>NNNNN
GACACCTTCATTTCCACTTTATTGAGCAGCGGCGCATGCGTGCACCGCTCGACCGTGATTCTTTCTACACGAGATTGCTGACTGGCCCCTGACCCCTTCA
>7001289F:56:HKH3FBCXX:2:1101:1522:2186 1:N:0:CGATGT
GTAGATGATGAATACAGCTGTTGCTGCAGCAACTGGTGCTGAGTAAGCAACTGCGATCCATGGACGCATACCTAAACGGAAAGATAATTCCCAC
>NNNNN
GTGGGAATTATCTTTCCGTTTAGGTATGCGTCCATGGATCGCAGTTGCTTACTCAGCACCAGTTGCTGCAGCAACAGCTGTATTCATCATCTAC

次のようにフォーマットする必要があります。

>7001289F:56:HKH3FBCXX:2:1101:1692:2074 1:N:0:CGATGT
GAGCAGAGGCACCGCTGAGCAGACAGCGAGCGAGTGAAGGGGTCAGGGGCCAGTCAGCAATCTCGTGTAGAAAGAATCACGGTCGAGCGGTGCACGCATGNNNNNGACACCTTCATTTCCACTTTATTGAGCAGCGGCGCATGCGTGCACCGCTCGACCGTGATTCTTTCTACACGAGATTGCTGACTGGCCCCTGACCCCTTCA
>7001289F:56:HKH3FBCXX:2:1101:1522:2186 1:N:0:CGATGT
GTAGATGATGAATACAGCTGTTGCTGCAGCAACTGGTGCTGAGTAAGCAACTGCGATCCATGGACGCATACCTAAACGGAAAGATAATTCCCACNNNNNGTGGGAATTATCTTTCCGTTTAGGTATGCGTCCATGGATCGCAGTTGCTTACTCAGCACCAGTTGCTGCAGCAACAGCTGTATTCATCATCTAC

基本的に、複雑なヘッダーはDNA配列の順方向読み取りを表し、NNNNNNヘッダーと一緒に対応する逆方向読み取りを表すヘッダーが続きます。これらの逆方向読み取りをNNNNNでのみ区切られた順方向読み取りに追加する必要がありますが、sedで改行を削除することは困難です。誰でもこれを説明できますか?

ベストアンサー1

ファイルがメモリに入るのに十分小さい場合は、次のことができます。

perl -00pe 's/\n>(NNNNN)\n/$1/g' file

ファイルがRAMにロードするには大きすぎるため、次のコマンドを使用できます。

$ perl -pe '$c++; if($c==2){chomp}
                  elsif($c==3){s/[>\n]//g;}
                  elsif($c==4){$c=0}' file.fa
>7001289F:56:HKH3FBCXX:2:1101:1692:2074 1:N:0:CGATGT
GAGCAGAGGCACCGCTGAGCAGACAGCGAGCGAGTGAAGGGGTCAGGGGCCAGTCAGCAATCTCGTGTAGAAAGAATCACGGTCGAGCGGTGCACGCATGNNNNNGACACCTTCATTTCCACTTTATTGAGCAGCGGCGCATGCGTGCACCGCTCGACCGTGATTCTTTCTACACGAGATTGCTGACTGGCCCCTGACCCCTTCA
>7001289F:56:HKH3FBCXX:2:1101:1522:2186 1:N:0:CGATGT
GTAGATGATGAATACAGCTGTTGCTGCAGCAACTGGTGCTGAGTAAGCAACTGCGATCCATGGACGCATACCTAAACGGAAAGATAATTCCCACNNNNNGTGGGAATTATCTTTCCGTTTAGGTATGCGTCCATGGATCGCAGTTGCTTACTCAGCACCAGTTGCTGCAGCAACAGCTGTATTCATCATCTAC

説明する

  • perl -pe '...' file.fa: 入力ファイルの各行に対して、指定されたfile.faスクリプトを実行してリントします。-e-p
  • $c++:変数を1行に1つずつ増やします$c
  • if($c==2){chomp}$c:現在の値がある場合は、行末の2改行を削除します。これは順方向シーケンスの行と一致します。
  • elsif($c==3){s/[>\n]//g;}$cその場合は、改行3文字を>NNNNN削除してください。>
  • elsif($c==4){$c=0}'$cその場合は4リセットしてください0

これはペアの読み込みを想定しています。ファイル内のすべての順方向読み取りに対して正確に1つの逆方向読み取りがないと失敗します。また、シーケンスが一行にあると仮定します。 Fastaファイルは通常、シーケンスごとに複数行で構成され、デフォルトでは60文字に切り捨てられます。これは近年変更されていますが、フォーマットはまだ複数のシーケンスを受け入れます。

おすすめ記事