質問:
fastaファイルをタブ区切りファイルに変換する方法
AudileF
2017-10-17 16:00:10 UTC
view on stackexchange narkive permalink

  >sample 1 gene 1atgc>sample 1 gene 2atgc>sample 2 gene 1 atgc  

のようなfastaファイルがあります。ヘッダーとシーケンスの間の1つのブレーク。

  >sample1遺伝子1atgc>sample1遺伝子2atgc>sample2遺伝子1atgc  
みなさん、ありがとうございました。あなたは選択を難しくしています。 terdonスクリプトとChrisスクリプトの両方が正しいように、複数行のfasta用に何かが必要でした。だから私は先着順ということわざに従います。
8 答え:
terdon
2017-10-17 17:21:48 UTC
view on stackexchange narkive permalink

非常に一般的なように、複数行の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へのクレジット。サブ>

Chris_Rands
2017-10-18 02:43:19 UTC
view on stackexchange narkive permalink

非常にシンプルな BioPythonソリューションがあります。これは最小限で読みやすく、複数行のfastaを処理します。

  from Bio import SeqIOfor record in SeqIO.parse ( 'example.fa'、 'fasta'):print( '> {} \ t {}'。format(record.description、record.seq)) 
Pierre
2017-10-17 16:53:41 UTC
view on stackexchange narkive permalink

レコードごとにシーケンス行が1つしかない場合は、2つの「stdin」を指定して貼り付けを使用します

  cat your.fasta |貼り付け---  
(Pierreが指摘したように)複数行のシーケンスがある場合だけでなく、ファイルに空白行がある場合も、これは失敗することに注意してください。 [UuOC](http://catb.org/jargon/html/U/UUOC.html)を削除することもできます: `paste ---
Karel Brinda
2017-10-26 01:51:42 UTC
view on stackexchange narkive permalink

次のコマンドを使用できます:

  perl -pe's / >(。*)/ > \ 1 \ t / g; s / \ n // g; s / > / \ n> / g'sequences.fa | grep -v '^ $'  

説明:

  1. すべてのヘッダー行にタブを追加します
  2. すべての行に参加します
  3. 取得した単一の行を「>」文字で分割します
  4. 空の行を削除します(「>」がFASTAファイルの最初の文字であるため、最初の行は空です)
  5. ol>
bli
2017-10-19 14:04:02 UTC
view on stackexchange narkive permalink

この種のデータ操作に非常に役立つツールは 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命令内で使用できます。

たとえばこの回答は別のユースケースです。

Konrad Rudolph
2017-10-17 21:45:11 UTC
view on stackexchange narkive permalink

可能であれば、パーサーを一緒にハッキングするのではなく、専用の解析ライブラリを使用することをお勧めします。他の回答でわかるように、正確さを重視すると、単純な形式でも解析が非常に迅速に複雑になります。

'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で記述できます。

Rがこれを行うためにインストールする必要のあるパッケージについても説明していただけますか? `seqinr`はバニラRの一部ではありません。
@terdon少し混乱しています。「seqinr」はパッケージ名なので、インストールする必要があります。
パッケージの名前が、そこからロードするライブラリと同じでない場合があります。いずれにせよ、Rはひどく複雑な混乱であるため、パッケージを `install.package`でインストールできるのか、それともバイオコンダクターなどを介して実行する必要があるのか​​を知ることはできません(またはとにかくわかりません)。場合によっては。 Rパッケージの管理は簡単なことではないので、コードの実行に必要なパッケージのインストール方法を説明すると便利だと思いました。これでコマンドを編集しました。私は賛成しますが、2017年にすでに賛成しました:)
@terdon「パッケージの名前が、そこからロードするライブラリと同じでない場合があります」—いいえ、Rの場合、定義上、常に同じです。インストールに関しては、CRANにないパッケージには特別なケースがあることをお伝えしますが、ルールではなく、例外を詳しく説明することは本当に意味があります。 CPANでのPerlパッケージ、PyPIでのPython、JavaScript用のNPM、Rustクレートのインストール手順については触れません。 (a)冗長であり、(b)間違っていたため、編集を取り消しました。クラスタを管理しているシステム管理者でない限り、 `sudoR`を介してパッケージをインストールしないでください。
ああ、私はそれをせずに試しましたが、ユーザーのローカルライブラリにインストールしようとすると失敗したので、パッケージはシステム全体にしかインストールできないと思いました。しかし、それは、インストールコマンドを含めることが役立つ理由を証明するだけです。私はRを知りません(そして情熱を持ってそれを嫌います)ので、あなたが言及するこれらすべてのことはあなたにとって明白ですが、私にはありません。そしておそらく他の人たち、そういうわけで、私はいつも答えにパッケージをインストールするコマンドを含めています。
burger
2017-10-17 19:20:52 UTC
view on stackexchange narkive permalink

空のレコードを削除します(シーケンスなしの説明):

  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  
Daniel Standage
2019-05-23 20:39:34 UTC
view on stackexchange narkive permalink

シーケンスの折り返しがなく、各シーケンスが1行しか使用しない場合は、次のシェルコマンドが最も速く、最も簡単で、最も便利になります。

  paste --- < your.fasta > your.new.fasta  
おっと、ピエールはすでにこれを提案したようです。 :-)


このQ&Aは英語から自動的に翻訳されました。オリジナルのコンテンツはstackexchangeで入手できます。これは、配布されているcc by-sa 3.0ライセンスに感謝します。
Loading...