fastaシーケンスから改行文字を削除する方法

fastaシーケンスから改行文字を削除する方法

modelfasta.fasta次の fasta ファイルがあります( )。

>seq1
AAAAAAAAAAAAAAA
GGGGGGGGGGG
>seq2
TTTTTTTTTTTTTTT
CCCCCCC

私は次の結果を期待しています:

>header>seq1
AAAAAAAAAAAAAAAGGGGGGGGGGG
>header>seq2
TTTTTTTTTTTTTTTCCCCCCC

fastaサンプルファイル(modelfasta.fasta)と一緒にsedコマンドとawkコマンドを試しましたが、この方法で出力を得ました。

awk '{printf $0""}' modelfasta.fasta 

>seq1AAAAAAAAAAAAAAAGGGGGGGGGGG>seq2TTTTTTTTTTTTTTTCCCCCCC

また、タイトルの後の改行文字を削除し、シーケンスをタイトルとマージします。

sedを使用して同じ結果を見つけました。

sed ':a;N;$!ba;s/\n//g' modelfasta.fasta

>seq1AAAAAAAAAAAAAAAGGGGGGGGGGG>seq2TTTTTTTTTTTTTTTCCCCCCC

ヘッダを除くすべての新しい行を削除したいです。助けてください。

ベストアンサー1

fastaヘッダー文字で始まらない行からすべての改行を削除しようとしています>

awk '/^[>;]/ { if (seq) { print seq }; seq=""; print } /^[^>;]/ { seq = seq $0 } END { print seq }' data.fa

awkスクリプトは次のとおりです。

/^[>;]/    { if (seq) { print seq }; seq=""; print }
/^[^>;]/ { seq = seq $0 }
END     { print seq }

...ファイルで見つかった内容に応じて、3つの異なる操作を実行します。

  • fastaヘッダー行(で始まる行>)またはfastaコメント行(で始まる行;):私たちが覚えているシーケンスseq(存在する場合)を印刷します(前のヘッダーに属します)。記憶された順序を消去します。現在の行(タイトルまたは説明)を印刷します。
  • fastaタイトルなし(およびコメントなし)行:記憶されたシーケンスをその行のシーケンスに関連付けます。これにより、改行文字が効果的に削除されます。
  • ファイルの終わり:印刷順序。これはファイルの最後のヘッダーに関連したシーケンスです。

シーケンスをきれいに印刷するには、たとえば1行に60文字に制限します。

#!/usr/bin/awk -f

function pretty(s) {
  p = "";
  n = 1;

  while (n < length(s)) {
    p = (p ? p "\n" : "") substr(s, n, 60);
    n += 60;
  }

  return p;
}

/^[>;]/  { if (seq) { print pretty(seq) }; seq=""; print }
/^[^>;]/ { seq = seq $0 } 
END      { print pretty(seq) }

それを入れてprettyfasta.awk実行可能にしてchmod +x prettyfasta.awkから()実行してください。

$ ./prettyfasta.awk data.fa

おすすめ記事