转录组比对步骤中的脚本运行问题与echo进行debug方法

学徒在完成转录组实战任务的时候,出现了一个小bug,自顾自的纠结了一晚上不过来寻求我的帮助。让我非常生气,因为确实是很简单的两个小技巧,主要是理解全局变量、环境变量。

就是hisat2进行批量比对代码失效

示例:当前目录文件如下:

1.2G 10月 30 10:14 SRR1039510_1_val_1.fq.gz
1.2G 10月 30 10:14 SRR1039510_2_val_2.fq.gz
1.1G 10月 30 10:14 SRR1039511_1_val_1.fq.gz
1.1G 10月 30 10:14 SRR1039511_2_val_2.fq.gz
1.5G 10月 30 10:18 SRR1039512_1_val_1.fq.gz
1.5G 10月 30 10:18 SRR1039512_2_val_2.fq.gz
816M 10月 30 10:12 SRR1039513_1_val_1.fq.gz
820M 10月 30 10:12 SRR1039513_2_val_2.fq.gz
2.1G 10月 30 10:27 SRR1039514_1_val_1.fq.gz
2.1G 10月 30 10:27 SRR1039514_2_val_2.fq.gz
253M 10月 30 10:05 SRR1039515_1_val_1.fq.gz
253M 10月 30 10:05 SRR1039515_2_val_2.fq.gz
131M 10月 30 10:05 SRR1039516_1_val_1.fq.gz
135M 10月 30 10:05 SRR1039516_2_val_2.fq.gz
1.8G 10月 30 10:23 SRR1039517_1_val_1.fq.gz
1.8G 10月 30 10:23 SRR1039517_2_val_2.fq.gz
1.6G 10月 30 10:20 SRR1039518_1_val_1.fq.gz
1.6G 10月 30 10:20 SRR1039518_2_val_2.fq.gz
451M 10月 30 10:07 SRR1039519_1_val_1.fq.gz
458M 10月 30 10:07 SRR1039519_2_val_2.fq.gz
645M 10月 30 10:09 SRR1039520_1_val_1.fq.gz
648M 10月 30 10:09 SRR1039520_2_val_2.fq.gz
856M 10月 30 10:12 SRR1039521_1_val_1.fq.gz
859M 10月 30 10:12 SRR1039521_2_val_2.fq.gz
1.6G 10月 30 10:20 SRR1039523_1_val_1.fq.gz
1.6G 10月 30 10:20 SRR1039523_2_val_2.fq.gz

他首先定义index变量,为ref文件路径

index=/refdir/server/reference/index/hisat/hg38/genome

然后运行脚本进行hisat2比对,代码如下

for id in {08..23} 
do 
hisat2 -t -x $index \
-1 /home/project/rna/clean/SRR10395${id}_1_val_1.fq.gz \
-2 /home/project/rna/clean/SRR10395${id}_2_val_2.fq.gz \
-S /home/project/rna/align/SRR10395${id}.sam 
done

提交脚本后出现Exit,也就是说报错了!

  1. 此时如何进行故障排查?

循环中加echo,查看脚本中所运行的真实代码

for id in {08..23} 
do 
echo hisat2 -t -x $index \
-1 /home/data/jjl/project/rna/clean/SRR10395${id}_1_val_1.fq.gz \
-2 /home/data/jjl/project/rna/clean/SRR10395${id}_2_val_2.fq.gz \
-S /home/data/jjl/project/rna/align/SRR10395${id}.sam 
done

运行后真实代码打印出来如下

"hisat2 -t -x $index \
-1 /home/data/jjl/project/rna/clean/SRR1039508_1_val_1.fq.gz \
-2 /home/data/jjl/project/rna/clean/SRR1039508_2_val_2.fq.gz \
-S /home/data/jjl/project/rna/align/SRR1039508.sam"

发现$id已经成功调用08,09,10…….

但是$index 没有成功调用,echo出来还是 $index 本身,也就是说这个变量并没有被解析啊!

故障原因:在脚本中运行的代码如果要调用变量index,脚本外的环境定义的变量index是无法被成功调用的

简言之:“全局”定义的变量不能有效覆盖“局部”脚本内变量的调用需求!

  1. 应该如何解决故障?

必须在脚本内现场定义变量进行赋值index,然后脚本内才能成功调用index。

因此调整脚本全部的代码如下(即添加下面第一行)

# 添加这一行
index=/refdir/server/reference/index/hisat/hg38/genome
# 后面代码不变
for id in {08..23} 
do 
echo hisat2 -t -x $index \
-1 /home/project/rna/clean/SRR10395${id}_1_val_1.fq.gz \
-2 /home/project/rna/clean/SRR10395${id}_2_val_2.fq.gz \
-S /home/project/rna/align/SRR10395${id}.sam 
done

运行成功!

两个小tips

  • 写好的脚本需要多echo看看。
  • 先运行测试数据看自己的脚本是否正确,然后上真实的大量样品数据项目。

Comments are closed.