>sample 1 gene 1atgc>sample 1 gene 2atgc>sample 2 gene 1 atgc
のようなfastaファイルがあります。ヘッダーとシーケンスの間の1つのブレーク。
>sample1遺伝子1atgc>sample1遺伝子2atgc>sample2遺伝子1atgc
>sample 1 gene 1atgc>sample 1 gene 2atgc>sample 2 gene 1 atgc
のようなfastaファイルがあります。ヘッダーとシーケンスの間の1つのブレーク。
>sample1遺伝子1atgc>sample1遺伝子2atgc>sample2遺伝子1atgc
非常に一般的なように、複数行のfastaファイルがある場合は、次のスクリプト 1 sup>を使用して、fastaとtbl(sequence_name <TAB>
sequence)形式の間で変換できます。
FastaToTbl
#!/ usr / bin / awk -f {if(substr($ 1 、1,1)== ">")if(NR>1)printf "\ n%s \ t"、substr($ 0,2、length($ 0)-1)else printf "%s \ t"、substr($ 0 、2、length($ 0)-1)else printf "%s"、$ 0} END {printf "\ n"}
TblToFasta
#! / usr / bin / awk -f {sequence = $ NF ls = length(sequence)is = 1 fld = 1 while(fld < NF){if(fld == 1){printf ">"} printf "%s" 、$ fld if(fld == NF-1){printf "\ n"} fld = fld + 1} while(is < = ls){printf "%s \ n"、substr(sequence、is、60)is = is + 60}}
$ PATH
に保存し、実行可能にすると、次のことができます。
の $猫file.fa>sequence1 ATGCGGAGCTTAGATTCTCGAGATCTCGATATCGCGCTTATAAAAGGCCCGGATTAGGGCTAGCTAGATATCGCGATAGCTAGGGATATCGAGATGCGATACG>sequence2 GTACTCGATACGCTACGCGATATTGCGCGATACGCATAGCTAACGATCGACTAGTGATGCATAGAGCTAGATCAGCTACGATAGCATCGATCGACTACGATCAGCATCAC $ FastaToTbl file.fa sequence1 ATGCGGAGCTTAGATTCTCGAGATCTCGATATCGCGCTTATAAAAGGCCCGGATTAGGGCTAGCTAGATATCGCGATAGCTAGGGATATCGAGATGCGATACGsequence2 GTACTCGATACGCTACGCGATATTGCGCGATACGCATAGCTAACGATCGACTAGTGATGCATAGAGCTAGATCAGCTACGATAGCATCGATCGACTACGATCAGCATCAC
の
と、Fastaを取り戻すには:
$ FastaToTbl file.fa | TblToFasta>sequence1 ATGCGGAGCTTAGATTCTCGAGATCTCGATATCGCGCTTATAAAAGGCCCGGATTAGGGCTAGCTAGATATCGCGATAGCTAGGGATATCGAGATGCGATACG>sequence2 GTACTCGATACGCTACGCGATATTGCGCGATACGCATAGCTAACGATCGACTAGAT
これは、fastaファイルで文字列を検索するときに非常に便利なトリックです。
TblToFastafile.fa | grep'foo '| FastaToTbl
ヘッダーの先頭の >
を本当に保持したい場合(あまり役に立たないようです)、次のようにすることができます:
$ perl -0pe's / \ n // g; s / .> / \ n> / g; s / $ / \ n /; ' file.fa >sequence1 ATGCGGAGCTTAGATTCTCGAGATCTCGATATCGCGCTTATAAAAGGCCCGGATTAGGGCTAGCTAGATATCGCGATAGCTAGGGATATCGAGATGCGATAC>sequence2 GTACTCGATACGCTACGCGATTAGCGATCGCAatGCGATATTGCGCGATACGCATAGCTAACGATCGACTAGTGATGCATAそれが問題である場合は、各fastaレコードの間に空の行を追加してから、perlの段落モードを使用して各「段落」(シーケンス)を一度に処理します。 perl-pe's / > / \ n> /'file.fa | perl -00pe's / \ n // g; s / .> / \ n> / g; s / $ / \ n /; '
1 sup> 10年以上前にこれらのスクリプトを作成したJosepAbrilへのクレジット。サブ>
非常にシンプルな BioPythonソリューションがあります。これは最小限で読みやすく、複数行のfastaを処理します。
from Bio import SeqIOfor record in SeqIO.parse ( 'example.fa'、 'fasta'):print( '> {} \ t {}'。format(record.description、record.seq))
レコードごとにシーケンス行が1つしかない場合は、2つの「stdin」を指定して貼り付けを使用します
cat your.fasta |貼り付け---
次のコマンドを使用できます:
perl -pe's / >(。*)/ > \ 1 \ t / g; s / \ n // g; s / > / \ n> / g'sequences.fa | grep -v '^ $'
説明:
この種のデータ操作に非常に役立つツールは bioawkです:
$ bioawk -c fastx '{print ">" $ name "" $ comment "\ t" $ seq} 'test.fa>sample1遺伝子1atgc>sample1遺伝子2atgc>sample2遺伝子1atgc
bioawkはawkに基づいており、解析機能が追加されています。ここでは、形式がfastaまたはfastqであり、 -c fastx
であることがわかります。これにより、 $ name
( ">"と最初の空白文字の間)、 $ comment
(最初の空白文字の後)および $ seq
(1行のシーケンス)変数は、awk命令内で使用できます。
たとえばこの回答は別のユースケースです。
可能であれば、パーサーを一緒にハッキングするのではなく、専用の解析ライブラリを使用することをお勧めします。他の回答でわかるように、正確さを重視すると、単純な形式でも解析が非常に迅速に複雑になります。
'seqinr'を使用して、必要なことを実行する小さなRスクリプトを次に示します。
#!/ usr / bin / env RscriptsuppressPackageStartupMessages(library(seqinr))parsed = read.fasta(file( 'stdin')、as.string = TRUE)table = data.frame(unlist(parsed)、row.names = sapply(parsed、attr、 'Annot '))write.table(table、stdout()、sep =' \ t '、quote = FALSE、col.names = FALSE)
fasta-toとして保存-tsv
、実行可能にし、次のように使用します。
fasta-to-tsv < input.fasta > output.tsv
同様の長さの同等のコードはPythonまたはPerlで記述できます。
空のレコードを削除します(シーケンスなしの説明):
awk '$ 2 {print RS} $ 2'FS =' \ n'RS = \ > ORS = f1.fa > f2.fa
空白行を削除します:
sed '/ ^ $ / d'f2.fa > f3.fa
複数行のfastaを単一行のfastaに変換します:
awk '/ ^ > / {printf( "\ n%s \ n"、$ 0); next; } {printf( "%s"、$ 0);} END {printf( "\ n");} 'f3.fa > f4.fa
最後に、@ Pierreソリューション:
cat f4.fa |貼り付け---- > f.txt
シーケンスの折り返しがなく、各シーケンスが1行しか使用しない場合は、次のシェルコマンドが最も速く、最も簡単で、最も便利になります。
paste --- < your.fasta > your.new.fasta