
Então, estou usando um protocolo chamado 'smoking' para análise de dados de sequenciamento de RNA. É mais uma questão técnica relacionada ao script de shell. Posso fazer isso na linha de comando e não tenho problemas como tal. Como estou fazendo isso em um cluster, gostaria de usar um script que possa automatizar minha tarefa.
Portanto, o comando do protocolo é assim:
cartola
abotoaduras
fusão de punho
algema
O primeiro comando faz todo o alinhamento que gera algum arquivo que devo usar para o próximo comando
cufflinks
, entãocuffmerge
e finalmentecuffdiff
.
Alguém pode me ajudar a escrever um script de shell simples que possa chamar cada um desses comandos e executar a tarefa.
Qualquer ajuda seria muito 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
onde 'p' corresponde ao número do processador, '-o' corresponde ao diretório de saída e resto '-g' corresponde ao arquivo de anotação que estou usando para anotar minhas leituras RAW que serão alinhadas.
Responder1
A solução simples e frágil
Vamos escrever um script simples chamado 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 e cole todas as linhas acima, incluindo as linhas que começam com "#" no gedit, e salve como hailmary.sh.
No Nautilus, clique com o botão direito no arquivo que você acabou de criar e selecione
Properties
. Vá paraPermissions
a guia e coloque uma marca de seleção ao lado de Permitir execução de arquivo como programa.Alternativamente, em um terminal digite:
chmod +x hailmary.sh
Para executar o script em um terminal, digite:
./hailmary.sh
O ./
antes do nome é necessário e assume que o arquivo está no local do diretório atual. Se você colocar o arquivo em uma pasta que esteja no caminho, como /home/<userid>/bin
, não precisará do ./
. Se você colocá-lo em outro lugar, precisará escrever o caminho completo, como:
/home/<userid>/myspecialfolder/hailmary.sh
Observe que os quatro comandos e seus argumentos estão em quatro linhas separadas. Se quiser colocá-los em uma única linha, você deve separá-los por &&
ou por ;
. Não há necessidade ;
se eles estiverem em linhas separadas.
Em qualquer um desses casos, o segundo comando não será iniciado até que o primeiro seja concluído (ou trave!).
O problema com esta abordagem é que ela não verifica se o primeiro comando foi executado com sucesso antes de executar o segundo e assim por diante. Portanto, se tophat
falhar por algum motivo, o script continuará com a sequência de cufflink, cuffmerge e cuffdiff. É por isso que chamo isso de script hailmary.sh
.
Script com verificação de saída 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 isso ajude até que alguém forneça uma resposta mais elegante.