La solución simple y frágil

La solución simple y frágil

Entonces, estoy usando un protocolo llamado "esmoquin" para el análisis de datos de secuenciación de ARN. Es más bien una cuestión técnica relacionada con las secuencias de comandos de Shell. Puedo hacerlo en la línea de comando y no tengo problemas como tal. Como lo hago en un clúster, me gustaría utilizar un script que pueda automatizar mi tarea.

Entonces el comando de protocolo es el siguiente:

  1. sombrero de copa

  2. gemelos

  3. puños

  4. manguito

    El primer comando hace toda la alineación que genera un archivo que tengo que usar para el siguiente comando cufflinks, luego cuffmergey finalmente cuffdiff.

¿Alguien puede ayudarme a escribir un script de shell simple que pueda llamar a cada uno de estos comandos y realizar la tarea?

Cualquier ayuda sería muy apreciada.

argumentos

tophat -p 8 -G genes.gtf -o C1_R1_thout genome C1_R1_1.fq C1_R1_2.fq
cufflinks -p 8 -o C1_R1_clout C1_R1_thout/accepted_hits.bam
cuffmerge -g genes.gtf -s genome.fa -p 8 assemblies.txt 
cuffdiff -o diff_out -b genome.fa -p 8 –L C1,C2 -u merged_asm/merged.gtf \
./C1_R1_thout/accepted_hits.bam,./C1_R2_thout/accepted_hits.bam,./C1_R3_thout/accepted_hits.bam \
./C2_R1_thout/accepted_hits.bam,./C2_R3_thout/accepted_hits.bam,./C2_R2_thout/accepted_hits.bam

donde, 'p' corresponde al número de procesador, '-o' corresponde al directorio de salida y el resto, '-g' corresponde al archivo de anotación que estoy usando para anotar mis lecturas RAW que estarán alineadas.

Respuesta1

La solución simple y frágil

Escribamos un script simple llamado hailmary.sh

#!/bin/bash
#The first line should always be just as it is above
#This script is called hailmary.sh
#because we run this script and we need to pray
#that all four commands will run correctly
#If one of them fail, you may not get the results

tophat -p 8 -G genes.gtf -o C1_R1_thout genome C1_R1_1.fq C1_R1_2.fq
cufflinks -p 8 -o C1_R1_clout C1_R1_thout/accepted_hits.bam
cuffmerge -g genes.gtf -s genome.fa -p 8 assemblies.txt 
cuffdiff -o diff_out -b genome.fa -p 8 –L C1,C2 -u merged_asm/merged.gtf ./C1_R1_thout/accepted_hits.bam,./C1_R2_thout/accepted_hits.bam,./C1_R3_thout/accepted_hits.bam ./C2_R1_thout/accepted_hits.bam,./C2_R3_thout/accepted_hits.bam,./C2_R2_thout/accepted_hits.bam
  1. Copie y pegue todas las líneas anteriores, incluidas las líneas que comienzan con "#", en gedit y guárdelas como hailmary.sh.

  2. En Nautilus, haga clic derecho en el archivo que acaba de crear y seleccione Properties. Vaya a Permissionsla pestaña y coloque una marca de verificación junto a Permitir ejecutar archivo como programa.

    Alternativamente, en una terminal ingrese:

    chmod +x granizo.sh

  3. Para ejecutar el script en una terminal, ingrese:

    ./hailmary.sh

El ./nombre anterior es necesario y se supone que el archivo está en la ubicación del directorio actual. Si coloca el archivo en una carpeta que se encuentra en la ruta, como por ejemplo /home/<userid>/bin, no necesitará el archivo ./. Si lo colocas en otro lugar necesitarás escribir la ruta completa, como por ejemplo:

/home/<userid>/myspecialfolder/hailmary.sh

Tenga en cuenta que los cuatro comandos y sus argumentos están en cuatro líneas separadas. Si quieres ponerlos en una sola línea, tienes que separarlos por &&o por ;. No es necesario ;si están en líneas separadas.

En cualquiera de estos casos, el segundo comando no se iniciará hasta que el primero se complete (¡o falle!).

El problema con este enfoque es que no verifica si el primer comando se ejecutó exitosamente antes de ejecutar el segundo y así sucesivamente. Entonces, si tophatfalla por alguna razón, el guión continuará con la secuencia de cufflink, cuffmerge y cuffdiff. Por eso llamo a esto vale hailmary.sh.

Fuente:https://unix.stackexchange.com/questions/184502/bash-how-to-run-a-command-after-the-previous-finished

Script con verificación de salida de tophat

#!/bin/bash
#The first line should always be just as it is above
#This script is called hailmary2.sh
#This script runs tophat
#then checks for the existance of the output file
#If the output is found, it runs the rest

tophat -p 8 -G genes.gtf -o C1_R1_thout genome C1_R1_1.fq C1_R1_2.fq

if [[ -f "./C1_R1_thout/accepted_hits.bam" ]]; then
    echo "tophat finished. Proceeding with the rest"
    cufflinks -p 8 -o C1_R1_clout C1_R1_thout/accepted_hits.bam
    cuffmerge -g genes.gtf -s genome.fa -p 8 assemblies.txt 
    cuffdiff -o diff_out -b genome.fa -p 8 –L C1,C2 -u merged_asm/merged.gtf ./C1_R1_thout/accepted_hits.bam,./C1_R2_thout/accepted_hits.bam,./#C1_R3_thout/accepted_hits.bam ./C2_R1_thout/accepted_hits.bam,./C2_R3_thout/accepted_hits.bam,./C2_R2_thout/accepted_hits.bamfi
else echo "tophat did not complete"
fi

Espero que esto ayude hasta que alguien más proporcione una respuesta más elegante.

información relacionada