
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:
sombrero de copa
gemelos
puños
manguito
El primer comando hace toda la alineación que genera un archivo que tengo que usar para el siguiente comando
cufflinks
, luegocuffmerge
y finalmentecuffdiff
.
¿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
Copie y pegue todas las líneas anteriores, incluidas las líneas que comienzan con "#", en gedit y guárdelas como hailmary.sh.
En Nautilus, haga clic derecho en el archivo que acaba de crear y seleccione
Properties
. Vaya aPermissions
la 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
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 tophat
falla por alguna razón, el guión continuará con la secuencia de cufflink, cuffmerge y cuffdiff. Por eso llamo a esto vale hailmary.sh
.
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.