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