Spørsmål:
Slett alle de fire linjene i en fastq-lesing fra en fastq-fil ved hjelp av lese-ID
T. Ntsowe
2018-10-30 14:01:57 UTC
view on stackexchange narkive permalink

Jeg har følgende feil når jeg kjører bowtie2:

Feil: Les HWI-D00466: 116: CC62WANXX: 3: 1102: 7363: 63646 1: N: 0: GCACACG har mer lest tegn enn kvalitetsverdier.

Jeg vil nå fjerne alle de fire linjene i denne spesifikke avlesningen fra fastq-filen.

Hvordan kan jeg bruke awk eller sed for å gjøre dette ?

Kjør `hale` på FASTQ-filen. Hvis en jobb ble avbrutt mens du skrev til disk, vil denne lesingen være den siste linjen. Denne feilmeldingen betyr sannsynligvis at filen er avkortet og mangler lesing. Den lesningen er ikke like bekymringsfull som resten av dataene. Det er best å kjøre databehandlingen igjen for å sikre at filen er fullført.
Fem svar:
winni2k
2018-11-09 15:23:58 UTC
view on stackexchange narkive permalink

Ikke gjør det: Din FASTQ-fil er enten feil eller FASTQ-posten din strekker seg over mer enn fire linjer, noe som er tillatt i FASTQ. For en detaljert beskrivelse av hva som kan gå galt i FASTQ-parsering, se for eksempel http://biopython.org/DIST/docs/api/Bio.SeqIO.QualityIO-module.html#FastqGeneralIterator.

Hvis FASTQ er feil, bør du virkelig spørre deg selv hvordan dette skjedde i utgangspunktet og fikse kilden til problemet. Hvis posten er gyldig FASTQ, foreslår jeg at du analyserer lesingen med for eksempel FastqGeneralIterator og dumper det analyserte resultatet tilbake til FASTQ i en 4-linjers per postform.

terdon
2018-10-30 14:40:39 UTC
view on stackexchange narkive permalink

Hvis du er 100% sikker på at den bare har 4 linjer (de kan ha flere), kan du bruke denne sed -kommandoen:

  sed -i. bak '/ ^ @ HWI-D00466: 116: CC62WANXX: 3: 1102: 7363: 63646 1: N: 0: GCACACG /, + 3d'  

-i. bak gjør sed til å endre originalfilen og lage en sikkerhetskopi med samme navn og filtypen .bak . Kommandoen betyr bare "slett linjen som samsvarer med mønsteret og de neste tre linjene".

Kanskje "@" skal legges til mønsteret. Hva ville skje hvis lesenavnet også var på "+" -linjen?
Daniel Standage
2018-11-01 20:20:17 UTC
view on stackexchange narkive permalink

Når jeg kan, liker jeg å gjøre filbehandling linje for linje i ånden av UNIX-verktøy. Du kan lese 4 linjer fra en Fastq-fil i fire tabulatoradskilte verdier på en enkelt linje ved hjelp av lim inn , og deretter bruke grep for å filtrere ut den aktuelle posten. (Da er det bare å gjøre flikene om til linjeskift.)

  lim inn - - - - < reads.fastq \ | grep -v 'HWI-D00466: 116: CC62WANXX: 3: 1102: 7363: 63646' \ | tr '\ t' '\ n' \ > read-fixed.fastq  

Det er imidlertid sannsynlig at andre lesinger i Fastq-filen din også er ødelagt, i så fall er det sannsynligvis bedre å skriv et skript på Python eller et annet språk som forkaster alle lesinger hvis leselengde ikke samsvarer med kvalitetstrenglengden.

Men selvfølgelig er det viktigste spørsmålet: hvordan ble dataene ødelagt i det første sted? Hvor kom denne filen fra, og hvilke forhåndsbehandlingstrinn ble utført på den? Kommer du til å bli kvitt denne lesingen (eller alle lesningene med feil sekvens / kvalitetslengde) for å løse problemet for deg? Dette er ikke spørsmål vi kan svare på for deg, men fortjener sannsynligvis gode svar. :-)

conchoecia
2018-10-31 20:41:27 UTC
view on stackexchange narkive permalink

Her er en awk one-liner som fungerer som beregnet, i motsetning til bioawk -svaret.

Dette fjerner alle forekomster av fastq-poster der lengden på seq og qual feltene stemmer ikke overens. Igjen, legg til | gzip > filtered.fastq.gz for å gzip utdataene.

  zcat bad_file.fq.gz | awk '{pos = NR% 4; hvis (pos == 1) {h =  $ 0} annet hvis (pos == 2) \ {s = $ 0} annet hvis (pos == 3) {c = $ 0} annet hvis (pos == 0) \ {q = $  0; hvis (lengde (q) == lengde (r)) {printf ("% s \ n% s \ n% s \ n% s \ n", h, s, c, q)}}} ' kode > 

Slett \ tegnene på slutten av de to første linjene for å gjøre det enkelt å lime inn i terminalen din.

Her er en kortere versjon av det samme takket være @terdon

  zcat file.fastq.gz | awk '{record [++ k] =  $ 0; hvis (NR% 4 == 2) {slen = lengde ($ 0)} ellers hvis (NR% 4 == 0) {if (lengde ($  0) == slen) {for (i i posten) {utskrift [i]}} k = 0; }} ' 
Heh, jeg skrev bare en også :) Her er hva jeg fant på, den er litt kortere enn din: `zcat file.fastq.gz | awk '{post [++ k] = $ 0; hvis (NR% 4 == 2) {slen = lengde ($ 0)} ellers hvis (NR% 4 == 0) {if (lengde ($ 0) == slen) {for (i i posten) {print record [i ]}} k = 0; }} `` legg det gjerne til svaret ditt hvis du vil.
conchoecia
2018-10-31 00:20:55 UTC
view on stackexchange narkive permalink

For å generalisere dette for å fjerne alle avlesninger som ikke har samme lengde på lese- og sekvenskvalitet, kan du bruke denne bioawk one-liner:

  bioawk -cfastx '{if (lengde ( $ seq) == lengde ($  qual)) {printf ("@% s% s \ n% s \ n + \ n% s \ n",  $ name, $  comment,  $ seq, $  qual)}} 'my_fastq.gz  

Dette striper noe i "fastq kommentarfeltet", + , men det har nesten aldri noe der uansett.

Legg til | gzip > filtered.fastq.gz til kommandoen ovenfor for å gzip utdataene.

Dette ser ikke ut til å fungere for meg (Arch Linux, bioawk versjon 20110810). Selv etter å ha korrigert syntaksfeilen (korrigert i svaret ditt), ser det ut til å gå ut etter den første posten den finner der lengdene ikke er de samme. Kan du bekrefte at det fungerer på maskinen din?
Takk for redigeringen! Jepp, jeg har nettopp bekreftet at det fungerer for meg på alle plater. Jeg bruker Ubuntu 16.04. `>> bioawk --version` returnerer` awk versjon 20110810`. Det ser ut som forrige gang jeg samlet bioawk var fra github repo i 2016.
Det er veldig rart. Jeg har samme versjon. Kan du prøve en sak der posten med forskjellige lengder er den andre i filen? Skriver det ikke bare den første platen der?
Jeg fikk den samme feilen som deg - Jeg gjorde at den andre oppføringen i fastq-filen hadde en annen lengde på seq- og qual-felt, og "bioawk" ble avsluttet før jeg skrev ut posten. Jeg lurer på om dette er ment oppførsel? Jeg må legge til at i min kommentar ovenfor prøvde jeg bare bioawk one-liner på en vanlig fastq-fil uten lengdeforskjell. Beklager!
Jeg ser ikke hvordan det kan være ment. Høres ut som en feil i bioawk.


Denne spørsmålet ble automatisk oversatt fra engelsk.Det opprinnelige innholdet er tilgjengelig på stackexchange, som vi takker for cc by-sa 4.0-lisensen den distribueres under.
Loading...