FASTAファイルを2行単位にするスクリプト

塩基配列中に改行が入ったFASTAファイルを2行単位のFASTAファイルに変換するシェルスクリプトです。Linux環境で動きます。

アセンブルしたデータやオンラインデータベースからダウンロードしたFASTAファイルは、配列中に改行が入っていることがしばしばです。

解析ソフトに投入するときはそんなに困らないのですが、目的の配列をgrepで抽出しようとするときに配列行が何行あるかわからず悩みまくった経験があるので、2行単位のスタイルに直して使っています。

2行単位であれば
$ grep -A 1 -e "ID"
でID+1行を抽出することも簡単になります!

#!/bin/sh

#select your file
file=./YOUR_FASTA_FILE

#temp file check
rm TEMP1.fa 2>/dev/null

#convert every 2 lines
cat $file | while read line; 
    do 
        line2=`echo $line | grep -e "^>"`
            if test -n "$line2" ; then
                echo $line | sed -e 's/^/\n/' >> TEMP1.fa
            else
                echo -n $line >> TEMP1.fa
            fi
    done

cat TEMP1.fa | sed -e '1d' | sed -e '$a @ENDLINE@' | sed -e '/@ENDLINE@/d' > output.fasta
rm TEMP1.fa

###END###
  • スクリプトを新しいテキストとして、変換したいFASTAファイルと同じディレクトリに保存してください。拡張子を「.sh」に変換してください。(わからなければ「script.sh」として保存してください。)

  • 「YOUR_FASTA_FILE」の部分を変換したいFASTAファイル名に書き換えてください。出力はoutput.fastaとして保存されます。

  • FASTAファイル名を書き換えたら保存をし、「$ . ./script.sh」で実行します。

  • 実行権限がない場合は「$ chmod +x script.sh」で権限を与えてください。

  • Linux環境用に書いているので、Macだとうまく動きません……(コマンドの挙動が異なる部分があるため)

メモ

  • ファイルの最終行の末尾に改行がないと最後の配列が認識できないことがあったので、sedを使って末尾に改行を入れています。

この記事が気に入ったらサポートをしてみませんか?