私は遺伝子に基づいて配列を命名し保存する29のfastaファイル(拡張子.fa)を持っています。
(例:リボソームタンパク質L1、リボソームタンパク質L6P / L9E、...)
この29個のファスタファイルには合計722種類があります。各配列の最初の行には対応する遺伝子と種名が表示され、2番目の行には対応する配列が表示されます。
1種は1つ以上の遺伝子配列を持っています。
遺伝子に基づいてソートされた29個のfastaファイルから722種を別々の722個のファイルに移動したいと思います(遺伝子の代わりに種によってソート)。
親ファイルの種名は角かっこで囲まれています[ ]
。
forループを使用して722個のファイルを抽出し、シーケンス名に基づいてファイル名を指定するには?
次の例Ribosomal Protein L1.fa
:
>gi|103486926|ref|YP_616487.1| 50S ribosomal protein L1 [Sphingopyxis alaskensis RB2256]
MAKLTKKQKALEGKVDAQKLHGVDEAIKLVRELATAKFDETLEIAMNLGVDPRHADQMVRGVVTLPAGTGKDVKVAVFAR
次の例Ribosomal Protein L6PL9E.fa
:
>gi|410479108|ref|YP_006766745.1| ribosomal protein L6P/L9E [Leptospirillum ferriphilum ML-04]
MGFTHTVEFTLPSLIKASIEKQTIITLSSPDKELLGQFAADVRSIRPPEPYKGKGIKYSGEKILRKEGKTGKK
最初の例として、
種名: Sphingopyxis alaskensis RB2256
遺伝子配列:MAKLTKKQKALEGKVDAQKLHGVDEAIKLVRELATAKFDETLEIAMNLGVDPRHADQMVRGVVTLPAGTGKDVKVAVFA
ファイル名を指定Sphingopyxis alaskensis RB2256.fa
し、その種名を持つすべてのシーケンスをファイルに挿入したいと思います。
これを行うためにbashシェルを使用しています。grep
タスクを完了するために使用できます。
grep -A+1 "Sphingopyxis alaskensis RB2256" *.fa >> Sphingopyxis alaskensis RB2256.fa
ところで、種別で順序を並べ替えるには、722番をする必要があります。
forループのgrepを使って作業を簡素化できますか?それとも別の方法がありますか?
答え1
Fasta形式では、すべてのシーケンスが1行にある必要はありません。実際、ほとんどの生物学的配列は非常に長いので、これは一般的ではありません。したがって、grep
IDシーケンスが1行を超えると、いずれの場合も失敗します。また、コマンドはという名前のファイルではなく名前のgrep
ファイルを生成します。Sphingopyxis
Sphingopyxis alaskensis RB2256.fa
とにかく、各シーケンスを種の後ろにファイル名に入れて、次のようにすることができます。
awk -F'[][]' '/>/{n=$2}; {print >> n".fa"}' *.fa
ただし、ファイル名にスペースを使用しないことをお勧めします。スペースを使用すると、作業が難しくなります。より安全なアプローチは次のとおりです。
awk -F'[][]' '/>/{n=$2; gsub(/ /,"_",n)}; {print >> n".fa"}' *.fa
gsub
種名のすべてのスペースを置き換えると、_
次のファイルが生成されます。
Leptospirillum_ferriphilum_ML-04.fa Sphingopyxis_alaskensis_RB2256.fa
上記の両方の方法は、複数行のシーケンスを処理できます。