2016-08-25 1 views
0

Ich habe eine 600 Mb FASTA Datei viele Ausrichtungen Blöcke von 12 Arten enthält, und ich möchte, dass sie in kleinere FASTA Dateien aufgeteilt, die ein Block jeweils mit den entsprechenden AusrichtungenWarum ist mein sed-Skript, um FASTA-Datei zu teilen, langsam?

Ich habe ein sed-Skript, das wie folgt aussieht:

#!/bin/bash 
echo 
for i in {0..Nblocks}; do 
    sed -n "/block_index=$i|/,/^$/p" genome12species.fasta > bloque$i.fasta 
done 

Dies funktioniert in einem kleinen Maßstab, aber für eine große Datei als 600Mb dauert es zu lange, etwa 2 Tage. Ich glaube nicht, dass es sich um den Computer handelt, den ich betreibe.

Weiß jemand, wie man das schneller macht?

Die Eingabe Fasta Datei sieht wie folgt aus:

dm3.chr3R (-): 17.092.630-17.092.781 | sequence_index = 0 | block_index = 4 | species = dm3 | dm3_4_0 GGCGGAGATCAAGAATCGCGTCGGGCCGCCGTCCAGCGCCACTGACAACGCTAGCAAAGTGAAAATCGATCAAGGACGTCCAGTGGAAAACACCAAATCCGGTTGCTGCTGAATAA-CTCTGATTGTGAATCattattttattatacaatta droGri2.scaffold_15074 (-): 2.610.183 bis 2.610.334 | sequence_index = 0 | block_index = 4 | species = droGri2 | droGri2_4_0 GGCGGAGATCAAGAATCGTGTTGGGCCGCCGTCGAGCGCCACCGATAACGCTAGCAAAGTGAAAATCGATCAGGGACGCCCAGTGGAAAACAATAGATCTGGTTGCTGCTAAATAA-CTCTGATTGTGAATCATTATTTTATTATACAATTa droMoj3.scaffold_6540 (+): 33.866.311-33.866.462 | s equence_index = 0 | block_index = 4 | species = droMoj3 | droMoj3_4_0 TGCCGAGATTAAGAATCGTGTCGGTCCGCCGTCCAGCGCAACCGACAATGCAAGCAAAGTGAAAATCGATCAGGGACGTCCAGTGGAGAACACCAGATCTGGTTGCTGCTGAATAA-CTCTGATTGTGAATCATTATTTTATTatacaatta droVir3.scaffold_12822 (+): 1.248.119 bis 1.248.270 | sequence_index = 0 | block_index = 4 | species = droVir3 | droVir3_4_0 GGCCGAGATTAAGAATCGCGTCGGGCCGCCGTCCAGCGCCACCGATAATGCTAGCAAAGTGAAAATCGATCAGGGTCGTCCAGTGGAGAACACCAAATCTGGTTGCTGCTGAATAA-CTCTGATTGTGAATCattattttattatacaatta droWil1.scaffold_181130 (-): 16.071.336-16.071.488 | sequence_index = 0 | block_index = 4 | species = droWil1 | droWil1_4_0 GGCCGAGATTAAGAATCGTGTTGGGCCGCCGTCCAGCGCCACTGATAATGCTAGCAAAGTGAAAATCGATCAAGGACGTCCAGTGGAAAATACCAAATCCGGTTGCTGCTGAATAAACTCTGATTGTGAATCATTATTTTATTATACAATTA droPer1.super_19 (-): 1.310.088 bis 1.310.239 | sequence_index = 0 | block_index = 4 | species = droPer1 | dro Per1_4_0 GGCTGAGATCAAGAATCGCGTCGGACCGCCGTCCAGCGCCACCGACAACGCTAGCAAAGTGAAAATCGATCAAGGACGTCCAGTGGAAAAACCCAATTCTGGTTGCTGCTGAATAA-CTCTGATTGTGAATCattattttattatacaatta dp4.chr2 (-): 5.593.491 bis 5.593.642 | sequence_index = 0 | block_index = 4 | species = dp4 | dp4_4_0 GGCTGAGATCAAGAATCGCGTCGGACCGCCGTCCAGCGCCACCGACAACGCTAGCAAAGTGAAAATCGATCAAGGACGTCCAGTGGAAAAGCCCAATTCTGGTTGCTGCTGAATAA-CTCTGATTGTGAATCattattttattatacaatta droAna3.scaffold_13340 (-): 3.754.154 bis 3.754.305 | sequence_index = 0 | block_index = 4 | species = droAna3 | droAna3_4_0 GGCCGAGATCAAGAATCGCGTCGGGCCACCGTCCAGCGCCACCGACAACGCTAGCAAAGTGAAAATCGATCAAGGACGTCCAGTGGAAAACACCAGATCCGGTTGCTGCTGAATAA-CTCTGATTGTGAATCattattttattataaaatta droEre2.scaffold_4770 (+): 4.567.591 bis 4.567.742 | sequence_index = 0 | block_index = 4 | species = droEre2 | droEre2_4_0 GGCCGAGATCAAGAATCGCGTCGGGCCG CCGTCCAGCGCCACCGACAACGCTAGCAAAGTGAAAATCGATCAAGGACGTCCAGTGGAAAACACCAAATCCGGTTGCTGCTGAATAA-CTCTGATTGTGAATCattattttattatacaatta droYak2.chr3R (-): 5.883.047 bis 5.883.198 | sequence_index = 0 | block_index = 4 | species = droYak2 | droYak2_4_0 GGCCGAGATCAAGAATCGCGTCGGGCCGCCATCCAGCGCCACCGACAACGCTAGCAAAGTGAAAATCGATCAAGGACGTCCAGTGGAAAACACCAAATCCGGTTGCTGCTGAATAA-CTCTGATTGTGAATCattattttattatacaatta droSec1.super_38 (+): 36.432-36.583 | sequence_index = 0 | block_index = 4 | species = droSec1 | droSec1_4_0 GGCGGAGATCAAGAATCGCGTCGGTCCGCCGTCCAGCGCCACTGACAACGCTAGCAAAGTGAAAATCGATCAAGGACGTCCAGTGGAAAACACCAAATCCGGTTGCTGCTGAATAA-CTCTGATTGTGAATCattattttattatacaatta droSim1.chr3R (+): 4.366.350 bis 4.366.501 | sequence_index = 0 | block_index = 4 | species = droSim1 | droSim1_4_0 GGCGGAGATCAAGAATCGCGTCGGGCCGCCGTCCAGCGCCACTGACAACGCTAGCAAAGTGAAAATCGATCAAGGACGTCCAGTGGAAAACACCAAATCCGGTTGCTGCTGAATAA-CTCTGATTGTGAATCattattttattatacaatta

dm3.chr3R (-): 17.092.781-17.092.867 | sequence_index = 0 | block_index = 5 | Spezies = dm3 | dm3_5_0 GAGTACGCCGCCCAGTTAGGCATTCCATTCCTTGAAACTTCGGCCAAGAGCGCCACCAACGTTGAGCAGGCCTTCATGACGATGGC droSim1.chr3R (+): 4.366.264 bis 4.366.350 | sequence_index = 0 | block_index = 5 | species = droSim1 | droSim1_5_0 GAGTACGCCGCCCAGTTAGGCATTCCATTCCTTGAAACTTCGGCCAAGAGCGCCACCAACGTTGAGCAGGCCTTTATGACGATGGC droSec1.super_38 (+): 36346-36432 | sequence_index = 0 | block_index = 5 | Spezies = droSec1 | droSec1_5_0 GAGTACGCCG CCCAGTTAGGCATTCCATTCCTTGAAACTTCGGCCAAGAGCGCCACCAACGTTGAGCAGGCCTTCATGACGATGGC droYak2.chr3R (-): 5.883.198 bis 5.883.284 | sequence_index = 0 | block_index = 5 | species = droYak2 | droYak2_5_0 GAGTACGCCGCCCAGTTAGGCATTCCATTCCTTGAAACATCGGCCAAGAGCGCCACCAACGTGGAGCAGGCCTTCATGACGATGGC droEre2.scaffold_4770 (+): 4.567.505 bis 4.567.591 | sequence_index = 0 | block_index = 5 | species = droEre2 | droEre2_5_0 GAGTACGCCGCCCAGTTAGGCATTCCATTCCTTGAAACTTCGGCCAAGAGCGCCACCAACGTGGAGCAGGCCTTCATGACGATGGC droAna3.scaffold_13340 (+): 20.375.068-20.375.148 | sequence_index = 0 | block_index = 5 | species = droAna3 | droAna3_5_0 ------ GCCGAAAACTTCGACATGCCCTTCTTCGAGGTCTCTTGCAAGTCAAACATCAATATTGAAGATGCGTTTCTTTCCCTGGC dp4.chr2 (-): 5.593.642 bis 5.593.728 | sequenz_index = 0 | block_index = 5 | art = dp4 | dp4_5_0 GAGTATGCAGCTCAGTTAGGCATTCCATTTCT TGAAACTTCGGCCAAGAGCGCCACGAACGTGGAGCAGGCCTTCATGACGATGGC droPer1.super_19 (-): 1.310.239 bis 1.310.325 | sequence_index = 0 | block_index = 5 | species = droPer1 | droPer1_5_0 GAGTATGCAGCTCAGTTAGGCATTCCATTTCTTGAAACTTCGGCCAAGAGCGCCACGAACGTGGAGCAGGCCTTCATGACGATGGC droWil1.scaffold_181130 (-): 16.071.488-16.071.574 | sequence_index = 0 | block_index = 5 | species = droWil1 | droWil1_5_0 GAATATGCGGCTCAGTTAGGCATTCCATTCCTTGAAACTTCGGCAAAGAGTGCCACCAATGTGGAGCAGGCCTTTATGACGATGGC droVir3.scaffold_12822 (+): 1.248.033 bis 1.248.119 | sequence_index = 0 | block_index = 5 | species = droVir3 | droVir3_5_0 GAGTACGCACATCAGTTAGGCATTCCATTCCTTGAAACTTCGGCCAAGAGCGCCACCAACGTGGAGCAGGCATTTATGACGATGGC droMoj3.scaffold_6540 (+): 33.866.225-33.866.311 | sequence_index = 0 | block_index = 5 | Arten = droMoj3 | droMoj3_5_0 GAGTATGCACATCAGTTAGGCATTCC ATTCCTTGAAACTTCGGCCAAGAGCGCCACCAATGTAGAGCAGGCATTCATGACGATGGC droGri2.scaffold_15074 (-): 2.610.334 bis 2.610.420 | sequence_index = 0 | block_index = 5 | species = droGri2 | droGri2_5_0 GAGTACGCAAATCAGTTAGGCATTCCATTCCTTGAAACTTCGGCGAAGAGTGCCACCAATGTGGAACAGGCATTCATGACGATGGC

+1

auf jeden Fall nur ein paar Minuten dauern sollte 'awk' dieses mit 1 Pass durch die Datei für Sie zu lösen in der Lage, und soll nur Minuten dauern. Wenn du mit sed "verheiratet" bist, dann kann das Wechseln zu ".../^ $/{p, q}" helfen, die Dinge zu beschleunigen, aber immer noch nicht annähernd so schnell wie awk. Fügen Sie einen kleinen Satz von gefälschten/Beispieldaten hinzu, die Ihr Dateiformat darstellen (max. 5-10 Zeilen, max. 30-60 Zeichen) und die Leute tauchen darin ein. (Ich muss ausgehen ;-/) . Viel Glück. – shellter

+1

Funktioniert '{0..Nblocks}' tatsächlich? (Ich glaube nicht, dass es das tut.) –

+0

Sie sollten auch http://stackoverflow.com/tour, http://stackoverflow.com/help/dont-ask und http://stackoverflow.com/ lesen. help/mcve Viel Glück. – shellter

Antwort

1

Hier ist ein awk oneliner zum Einstieg - es verwendet den gleichen Regex Bereich als Ihr sed - das angepasste block_index ist in m [1] - 600MB

awk 'match($0, /block_index=([0-9]+)\|/, m),/^$/ {print >"bloque"m[1]".fasta"}' 
+0

Danke! Das hat gut funktioniert. – NKGon

+0

Würde es Ihnen etwas ausmachen Timings für diese Lösung zu veröffentlichen? Danke – pakistanprogrammerclub

+0

natürlich! Ich habe es nicht genau geplant, aber es lief eine Datei von 650Mb und 215000 Blöcke von 12 Arten Alignments jeweils in etwa 20min. – NKGon