Простое и хрупкое решение

Простое и хрупкое решение

Итак, я использую протокол под названием «tuxedo» для анализа данных секвенирования РНК. Это больше технический вопрос, связанный с shell-скриптингом. Я могу сделать это в командной строке, и у меня нет никаких проблем как таковых. Поскольку я делаю это в кластере, я хотел бы использовать скрипт, который может автоматизировать мою задачу.

Итак, команды протокола таковы:

  1. цилиндр

  2. запонки

  3. манжета

  4. запонка

    Первая команда выполняет все выравнивание, в результате чего создается файл, который мне нужно использовать для следующей команды cufflinks, а затем cuffmergeи для последней cuffdiff.

Может ли кто-нибудь помочь мне написать простой скрипт оболочки, который может вызывать каждую из этих команд и выполнять задачу.

Любая помощь будет высоко оценен.

аргументы

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

где «p» соответствует номеру процессора, «-o» соответствует выходному каталогу, а «-g» соответствует файлу аннотаций, который я использую для аннотирования моих RAW-чтений, которые будут выровнены.

решение1

Простое и хрупкое решение

Давайте напишем простой скрипт под названием 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. Скопируйте и вставьте все приведенные выше строки, включая строки, начинающиеся с «#», в gedit и сохраните как hailmary.sh.

  2. В Nautilus щелкните правой кнопкой мыши по файлу, который вы только что создали, и выберите Properties. Перейти кPermissions вкладку и поставьте галочку рядом с Разрешить выполнение файла как программы.

    Либо введите в терминале:

    chmod +x hailmary.sh

  3. Чтобы запустить скрипт в терминале, введите:

    ./hailmary.sh

Перед ./именем необходимо, и предполагается, что файл находится в текущем каталоге. Если вы поместите файл в папку, которая находится в пути, например /home/<userid>/bin, , то вам не понадобится ./. Если вы поместите его в другое место, вам нужно будет написать весь путь, например:

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

Обратите внимание, что четыре команды и их аргументы находятся в четырех отдельных строках. Если вы хотите поместить их в одну строку, вам нужно разделить их с помощью &&или с помощью ;. В этом нет необходимости, ;если они находятся в отдельных строках.

В любом из этих случаев вторая команда не запустится, пока первая не завершится (или не выйдет из строя!).

Проблема этого подхода в том, что он не проверяет, успешно ли выполнилась первая команда, перед запуском второй и т. д. и т. п. Поэтому, если tophatпо какой-то причине произойдет сбой, скрипт продолжит последовательность cufflink, cuffmerge и cuffdiff. Вот почему я называю это scrip hailmary.sh.

Источник:https://unix.stackexchange.com/questions/184502/bash-how-to-run-a-command-after-the-previous-finished

Скрипт с проверкой вывода 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

Надеюсь, это поможет, пока кто-нибудь другой не даст более элегантный ответ.

Связанный контент