A solução simples e frágil

A solução simples e frágil

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:

  1. cartola

  2. abotoaduras

  3. fusão de punho

  4. algema

    O primeiro comando faz todo o alinhamento que gera algum arquivo que devo usar para o próximo comando cufflinks, então cuffmergee finalmente cuffdiff.

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
  1. Copie e cole todas as linhas acima, incluindo as linhas que começam com "#" no gedit, e salve como hailmary.sh.

  2. No Nautilus, clique com o botão direito no arquivo que você acabou de criar e selecione Properties. Vá para Permissionsa 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

  3. 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 tophatfalhar por algum motivo, o script continuará com a sequência de cufflink, cuffmerge e cuffdiff. É por isso que chamo isso de script hailmary.sh.

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

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.

informação relacionada