Frage:
Wie kann ich einen bestimmten FASTQ-Lesevorgang anhand der Lese-ID bearbeiten?
dkainer
2017-08-07 14:44:43 UTC
view on stackexchange narkive permalink

Bei einer Lese-ID möchte ich einen einzelnen Basisanruf (z. B. die 12. Basis) für genau diesen Lesevorgang in einer großen FASTQ-Datei mit Millionen von Lesevorgängen bearbeiten.

Beispiel: Ich möchte den ändern 12. Basis ( 'C') eingelesen 31027 zu einem 'T':

 @ 70630 1: N: 0: ATCACGGAAGGTCCATGGATAATACTCAATTTTCCACAACAGCTTTTGTACTCTAGATCATTGATATTTACCAAAAGTCACTCAAACTCATCCTATGCATAATTCTAGTCCACCAATCATGATATGATGGAGAACATGGTTGTAATCAGGAAGACAG + DDDDDHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIGHHIIIIIIIIIIIIIIIIIIIIIIHIIHIHIIIHHIGIIIIHHHHIIH @@ 31027 1: N: 0: ATCACGCAAAAGTCACTCAAACTCATCCTATGCATAATTCTAGTCCACCAATCATGATATGATGGAGAACATGGTTGTAATCAGGAAGACAGATAAAGCAGCAGACCAAAAGTAATCTGAGAAATTATATTTGAATCACTCAGATATACATCAAATA + DDBDDHC GHFHHIIE @ @ CEHHIHEFFCGFCH ? HHEGFCCEHHCGH @ HFHHHCHHIIIHEHIIHII @ CECHIHIIIEECCDGEHFFHHHHEHHFHHGGIHHHDGHFHIIIGHHHHHHEHHIIHIIIGGHHHCHHHCHIIIHHIEH @ GHIHIC @ 87319 1: N: 0: ATCACGCAATTAAGCTTTGGCAACGGTGGTCAAGATGAGATGCATATGGAGATAATAACTAAAAGTCAATCGAGACTCATCGTATGCATATTTCTAGTCCATCGA TCATGAAATGATAGGATAGCTAGAATGAAAAGTAAATTTCCAGAAGGTCCAT + DDDDDIIIIIIIIIIIIIHIHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHIIIIIIIIIIIIIIIIIHIIHIIIIIIIIIIIIHIIIIIIIIIHIHIH 

Natürlich habe ich durch die gesamte fastq Datei Umschreiben alles in eine neue Datei streamen könnte, bis ich zum Lesen von Interesse erhalten, führen Sie die Änderungen an, die lesen, sie schreiben auf die neue Datei, und dann weiter bis zum Ende. BioPython würde hier genauso gut funktionieren wie andere Ansätze.

Gibt es jedoch eine effiziente Möglichkeit, dies ohne den vollständigen Lese- / Schreibstrom zu tun? Könnte dies mit sed / awk gemacht werden? Was ist mit einer indizierten Fastq-Datei?

cheersDavid

Warum müssen Sie aus Neugier Ihre Lesungen bearbeiten?
Ja, sed / awk kann dies, aber es sei denn, Sie haben eine Art Index erstellt. * Jeder * Ansatz muss die Datei lesen. Positiv zu vermerken ist, dass dies mit schnellen Werkzeugen wie sed oder awk nicht zu langsam ist.
@JoeHealey Ich führe SNVs in bestimmte Stichproben ein, um falsch negative Raten für eine variante aufrufende Pipeline zu schätzen. Ich weiß, dass Lesevorgänge simuliert werden können, aber ich würde es tatsächlich vorziehen, die realen Daten zu verwenden, um alles andere gleich zu halten.
Zwei antworten:
Devon Ryan
2017-08-07 14:52:11 UTC
view on stackexchange narkive permalink

Sie müssen zuerst die entsprechende Zeilennummer ermitteln, was Sie mit grep -m1 -nw "@ 31027" foo.fastq tun können. Beachten Sie danach, dass Sie sed:

  sed -i '123456s / CAAAAGTCACTCA / CAAAAGTCACTTA /' foo.fastq   

Dadurch wird der Austausch nur in Zeile 123456 durchgeführt und die Datei an Ort und Stelle bearbeitet (Option -i ).

Die Option -n für grep war mir nicht bekannt. Dies sollte den Job machen
@dkainer Nur zur Vervollständigung können Sie die Zeilennummer der Zeile (n) erhalten, die mit der Zeichenfolge `foo` übereinstimmt, mit` sed -n / foo / =` oder `perl -ne 'print $. if / foo / `oder` awk '/ foo / {print NR} `ebenfalls.
terdon
2017-08-07 16:50:46 UTC
view on stackexchange narkive permalink

Wenn Ihre Fastq-Datei einfach ist und jeder Ihrer Lesevorgänge nur eine einzige DNA-Zeile enthält, können Sie Folgendes tun:

  awk '{if ($ 1 == "@ 31027") {a = NR + 1} if (NR == a) {split ($ 0, s, ""); s [12] = "T"; für (i in s) {seq = sprintf ("% s% s", seq, s [i]); } $ 0 = seq}} 1; ' file.fastq  


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...