当前位置: 华文星空 > 知识

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

2021-03-16知识

学徒在完成转录组实战任务的时候,出现了一个小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看看。
  • 先运行测试数据看自己的脚本是否正确,然后上真实的大量样品数据项目。