Spørsmål:
Bash scripting FastQC for flere fastq-filer i flere kataloger
Ryan Carter
2018-10-26 14:55:25 UTC
view on stackexchange narkive permalink

Jeg er helt ny innen bioinformatikk, så jeg ønsker å lære å gjøre dette.

Jeg har flere kataloger med fastq-filer: F.eks. 10 kataloger med hver tidsserie, hver med behandlings- og kontrollkataloger, hver med rep1 rep2 rep3.

For eksempel: T9 / Infected / Rep1 / *. Fastq.gz.

I Jeg ønsker å lage en sløyfe for å kjøre fastQC på hver fastq-fil i stedet for å måtte sende inn en egen jobb for hver katalog.

Deretter kan du enten sende fastQC-dataene til en enkelt katalog eller om mulig en katalog til hver representant - f.eks rep1-resultatene går inn i en mappe som heter rep1 og så videre.

Tre svar:
conchoecia
2018-10-26 22:02:17 UTC
view on stackexchange narkive permalink

multiqc slags glasurer over viktig informasjon, som nøyaktige adaptere og dupliserte sekvenser i et bibliotek. Hvis du planlegger å bruke store $$ for å sekvensere et bibliotek, er det bedre å se på både multiqc -rapporten og den faktiske fastqc html -rapporten for å få en bedre ide om eventuelle feil modus.

Jeg la merke til at det ikke var noen kommando om å kjøre fastqc.

-j 25 bruker 25 tråder. Endre 25 til hvor mange tråder du vil / har for maks hastighet.

  #Run fastqc på alt parallelt.> finn ../reads/ -name '* .fastq.gz '| awk '{printf ("fastqc \"% s \ "\ n", $ 0)}' | parallell -j 25 --verbose # kopierer alle fastqc-filene til katalogen ./ > finn ../reads/ -name '* fastqc. *' | xargs -I '{}' mv '{}' ./

Disse filene kan uansett sendes ut av multiqc !

rediger - nå er kommandoen trygg for mellomrom i filnavn. Vær så snill, ingen nye linjer i filnavnene skjønt!

+1, men merk at dette vil bryte i det usannsynlige tilfellet der noen av fastq-filnavnene inneholder mellomrom. En tryggere versjon er `finn. -navn '* .fastq.gz' | awk '{printf ("fastqc \"% s \ "\ n", $ 0)}' men det mislykkes fortsatt i det (enda mer usannsynlige) tilfellet der et filnavn inneholder en ny linje. Dette skal fungere for hva som helst (men krever en versjon av `find` med` -printf`, som GNU `find`):` find. -navn '* .fastq.gz' -printf '"% p" \ n' | parallell -j 25 --verbose`.
mellomrom i filnavn. Å, skrekken! Takk for kommentarene!
heh, jeg vet. Alle som har mellomrom i fastq filnavn fortjener det de får :) beklager, jeg er bare veldig vant til å legge ut på [Unix.se] der denne typen detaljer er mer relevant.
Kubator
2018-10-26 15:56:20 UTC
view on stackexchange narkive permalink

Eksempel dir struktur:

  $ finn FastQC / FastQC / FastQC / T9FastQC / T9 / InfectedFastQC / T9 / Infected / Rep1FastQC / T9 / Infected / Rep1 / test11.fastq.gzFastQC / T9 /Infected/Rep1/test1.fastq.gzFastQC/T9/Infected/Rep2FastQC/T9/Infected/Rep2/test2.fastq.gzFastQC/T9/Infected/Rep3FastQC/T9/Infected/Rep3/test3.fastq.gz  

Hvis du forstår det godt, må du kjøre en jobb på hver * .fastq.gz-fil. Da kan du gjøre noe som dette (eksempelet mitt er gzip test , erstatt med jobben din):

Rookie:

  $ find FastQC / -type f -navn "* .fastq.gz" | xargs gzip -tvFastQC / T9 / Infected / Rep1 / test11.fastq.gz: OKFastQC / T9 / Infected / Rep1 / test1.fastq.gz: OKFastQC / T9 / Infected / Rep2 / test2.fastq.gz: OKFastQC / T9 / Infected /Rep3/test3.fastq.gz: OK  

Solid:

  $ find FastQC / -type f -name "* .fastq.gz" - print0 | xargs -0 -I {} gzip -tv {} FastQC / T9 / Infected / Rep1 / test11.fastq.gz: OKFastQC / T9 / Infected / Rep1 / test1.fastq.gz: OKFastQC / T9 / Infected / Rep2 / test2. fastq.gz: OKFastQC / T9 / Infected / Rep3 / test3.fastq.gz: OK  
  1. finn finner filer med navn * .fastq.gz og sender den ut med null byte avgrenset (for å støtte rare tegn som mellomrom osv. i filnavn)
  2. xargs representerer utdata som {} og sender den til gzip -tv

Hvis du vil kopier filer i en heapmappe:

  $ find FastQC / -type f -name "* .fastq.gz" -print0 | xargs -0 -I {} cp -pv {} FastQC_heap / `FastQC / T9 / Infected / Rep1 / test11.fastq.gz '->` FastQC_heap / test11.fastq.gz'FastQC / T9 / Infected / Rep1 / test1 .fastq.gz '->' FastQC_heap / test1.fastq.gz'FastQC / T9 / Infected / Rep2 / test2.fastq.gz '-> `FastQC_heap / test2.fastq.gz'FastQC / T9 / Infected / Rep3 /test3.fastq.gz '-> `FastQC_heap / test3.fastq.gz'  
bli
2018-10-31 18:33:37 UTC
view on stackexchange narkive permalink

Dette er den typiske jobben for snakemake.

Forutsatt at du har en fil per replikat, for eksempel T9 / Infected / Rep1 / Rep1.fastq. gz , kan du klargjøre en fil du kaller Snakefile med følgende innhold:

  timepoints = list (rekkevidde (10)) betingelser = ["kontroll", "infisert"] replikater = [1, 2, 3] regel alle: input: expand ("T {time} / {cond} / Rep {rep} / Rep { rep} _fastqc.html ", time = tidspunkter, cond = betingelser, rep = replikater) regel do_fastqc: input: fastq =" T {time} / {cond} / Rep {rep} / Rep {rep} .fastq.gz " utgang: html = "T {time} / {cond} / Rep {rep} / Rep {rep} _fastqc.html" shell: "" "fastqc {input.fastq}" ""  

Sett denne filen i katalogen som inneholder T * katalogene og kjør snakemake derfra.

Den øverste alle regel forklarer hvilke filer du vil ha. do_fastqc -regelen forklarer hvordan du lager en fastqc-rapport fra en fastq.gz-fil.

Med litt mer arbeid kan dette brukes til å sende jobber til en databehandlingsklynge. Snakemake har noen verktøy for dette.

Hvis du ikke vet de eksakte navnene på fastq-filene, men alle følger samme mønster, må du bruke glob python-modul og gjør litt programmering for å bestemme de mulige verdiene for rep , cond og time . "Slangefilen" kan inneholde hvilken som helst python-kode du vil ha.

Hvis det ikke er noe vanlig mønster i filnavnene, kan du løse dette problemet først;)



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...