私は現在、スキャフォールディングを含む大容量ファスタファイル(3.7 GB)で作業しています。各足場には最初の行から始まる固有の識別子があり>
、連続行には次のようなDNA配列があります。
>9999992:0-108
AAAGAATTGTATTCCCTCCAGGTAGGGGGGATAGTTGAGGGGATACATAG
TGGGAAGGCTTTTCATGCGGAGGGACTAGAATGTGCTCCCGACTGACAAA
GCAGCTTG
>9999993:0-118
AGGGACTAGAAATGAGATTAAAAAGAGTAAAAGCACTGATACAAGTACAA
AAACAAATTGCTTCACCTCCAAAACCCCAGAAACTGCCCCACTTGGCTCC
CATTTAACCTACCTTCAA
>9999994:0-113
CCATCCTCATCCTTTCCTCCCCATATCTTCCTCTGACCCCAAAGCTCAGG
TTTCCTGTCTTGTTTCCCAGAATCTGTACCTCATGGTAGTTAAACCTTCC
CCTCTGGCAGCCA
>9999997:0-87
AACATCCCTGTGGCCTGAGAGACTGCCAGCCACAGCGGTGACAGTCCCTG
CGAGAGGCTGCTGCAAAAAGACTGGAGAGAAAGCAGA
>9999998:0-100
AAACATCAGCGCCAAGTCCCCGAAACCAGCAGGGTCACTGGGCGGCCGGC
CTGAAATACCCCAGCAGGCCAGCAGTGCCGGGTGCCTGGGGAGGTGTCCT
>9999999:0-94
AAGAAACTTTTCCCTTAACCAATGAAGAGTTTTATGTAAAGGAAATTTAG
TAATTTTTTAAAAAATGGTAATGACAGATTTAAGTAATTTAATT
ファイルを同じ長さの小さなファイルに分割して処理したいのですが、IDとシーケンスの両方を尊重して、次のような結果を得る必要があります。
file1.fa
>9999992:0-108
AAAGAATTGTATTCCCTCCAGGTAGGGGGGATAGTTGAGGGGATACATAG
TGGGAAGGCTTTTCATGCGGAGGGACTAGAATGTGCTCCCGACTGACAAA
GCAGCTTG
>9999993:0-118
AGGGACTAGAAATGAGATTAAAAAGAGTAAAAGCACTGATACAAGTACAA
AAACAAATTGCTTCACCTCCAAAACCCCAGAAACTGCCCCACTTGGCTCC
CATTTAACCTACCTTCAA
file2.fasta
>9999994:0-113
CCATCCTCATCCTTTCCTCCCCATATCTTCCTCTGACCCCAAAGCTCAGG
TTTCCTGTCTTGTTTCCCAGAATCTGTACCTCATGGTAGTTAAACCTTCC
CCTCTGGCAGCCA
>9999997:0-87
AACATCCCTGTGGCCTGAGAGACTGCCAGCCACAGCGGTGACAGTCCCTG
CGAGAGGCTGCTGCAAAAAGACTGGAGAGAAAGCAGA
file3.fasta
>9999998:0-100
AAACATCAGCGCCAAGTCCCCGAAACCAGCAGGGTCACTGGGCGGCCGGC
CTGAAATACCCCAGCAGGCCAGCAGTGCCGGGTGCCTGGGGAGGTGTCCT
>9999999:0-94
AAGAAACTTTTCCCTTAACCAATGAAGAGTTTTATGTAAAGGAAATTTAG
TAATTTTTTAAAAAATGGTAATGACAGATTTAAGTAATTTAATT
助けてください。 grepを使ってみましたcsplit
が、間違った結果が出ました。
ベストアンサー1
以下のコードは役に立ちますが、コンピュータの仕様によっては、大容量ファイルの場合は速度が遅くなることがあります。
まず、あなたが得なければならない総数ですUnique Identifier
。これを使用してこれを達成できます。grep -c
total=$(grep -c "^>" largeFastaFile.txt)
上記のコードは、total
で始まる一致する行の数を変数に割り当てます>
。これでUnique Identifier
、各ファイルの番号を取得する必要があります。だから欲しいなら10ファイル。あなたは分割する必要がありますtotal/10
:
max=$((total/10))
#If total has 3714529 then max will have 371,452.
最後に、awk
次のコマンドを使用して大容量ファイルを10個のファイルに分割できます(実際に11)について371,452個の固有識別子各ファイル:
awk -v maxline=$max -v count=0\
'{if(NR>1) { if( (NR-2)%maxline == 0 ) count++ ; print ">"$0 >("file"count".fasta") } }'\
RS='>' largeFastaFile.txt
スクリプトは次のようにする必要があります。
#!/bin/bash
total=$(grep -c "^>" largeFastaFile.txt)
max=$((total/10)) # where 10 is the number of files you will get
awk -v maxline=$max -v count=0 '{if(NR>1) { if( (NR-2)%maxline == 0 ) count++ ; print ">"$0 >("file"count".fasta") } }' RS='>' largeFastaFile.txt
実際には合計3714529
10個のファイルがあり、371,452 Unique Identifier
各ファイルの数が等しい場合は、他のファイルに複数の行が必要であるため、実際には11個のファイルが得られます。
371,452 * 10 = 3,714,520
だから番号11ファイルは最後です9 一意の識別子