因此,我使用一种名为“tuxedo”的协议进行 RNA 测序数据分析。这更像是与 shell 脚本相关的技术问题。我可以在命令行中执行此操作,并且没有遇到任何问题。由于我是在集群中执行此操作,因此我想使用可以自动执行我的任务的脚本。
因此协议命令如下:
大礼帽
袖扣
袖口合并
袖口差
第一个命令完成所有的对齐,并生成一些文件,我必须在下一个命令中使用该文件
cufflinks
,然后cuffmerge
,最后cuffdiff
。
谁能帮我编写一个简单的 shell 脚本,它可以调用每个命令并执行任务。
任何帮助都将非常感激。
参数
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 的顺序。这就是我将此脚本称为的原因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
希望这会有所帮助,直到其他人提供更优雅的答案。