
Итак, я использую протокол под названием «tuxedo» для анализа данных секвенирования РНК. Это больше технический вопрос, связанный с shell-скриптингом. Я могу сделать это в командной строке, и у меня нет никаких проблем как таковых. Поскольку я делаю это в кластере, я хотел бы использовать скрипт, который может автоматизировать мою задачу.
Итак, команды протокола таковы:
цилиндр
запонки
манжета
запонка
Первая команда выполняет все выравнивание, в результате чего создается файл, который мне нужно использовать для следующей команды
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
Скопируйте и вставьте все приведенные выше строки, включая строки, начинающиеся с «#», в gedit и сохраните как hailmary.sh.
В Nautilus щелкните правой кнопкой мыши по файлу, который вы только что создали, и выберите
Properties
. Перейти кPermissions
вкладку и поставьте галочку рядом с Разрешить выполнение файла как программы.Либо введите в терминале:
chmod +x hailmary.sh
Чтобы запустить скрипт в терминале, введите:
./hailmary.sh
Перед ./
именем необходимо, и предполагается, что файл находится в текущем каталоге. Если вы поместите файл в папку, которая находится в пути, например /home/<userid>/bin
, , то вам не понадобится ./
. Если вы поместите его в другое место, вам нужно будет написать весь путь, например:
/home/<userid>/myspecialfolder/hailmary.sh
Обратите внимание, что четыре команды и их аргументы находятся в четырех отдельных строках. Если вы хотите поместить их в одну строку, вам нужно разделить их с помощью &&
или с помощью ;
. В этом нет необходимости, ;
если они находятся в отдельных строках.
В любом из этих случаев вторая команда не запустится, пока первая не завершится (или не выйдет из строя!).
Проблема этого подхода в том, что он не проверяет, успешно ли выполнилась первая команда, перед запуском второй и т. д. и т. п. Поэтому, если tophat
по какой-то причине произойдет сбой, скрипт продолжит последовательность cufflink, cuffmerge и cuffdiff. Вот почему я называю это scrip hailmary.sh
.
Скрипт с проверкой вывода 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
Надеюсь, это поможет, пока кто-нибудь другой не даст более элегантный ответ.