![0b37d6959b003780e2a8c837e404d88a.png](https://i-blog.csdnimg.cn/blog_migrate/54af8be286d44be1bc15801792f542ef.jpeg)
健明
5分钟前:
看着新学徒慢慢成长,很开心,虽然他们总是犯一些让人很恼火的错误,但这可能就是成长的代价吧!
感兴趣的,可以看看这个错误是如何的明显!
如果你完全无法看懂,你可能需要把我B站linux视频刷一波!
全文目录
入门级 做好配置文件 命令脚本文件 提交至后台 进阶级 做好配置文件 命令脚本文件 提交至后台 补充一个错误的例子在使用Linux做NGS数据处理的过程中,批量处理是提高工作效率的好方法。批处理的方法有很多,今天我们就介绍两个不同级别的批处理方法。
入门级
接受过我们生信技能树线下培训的粉丝都知道,,在我们的课程中会介绍一种批处理的方法,如:
![2bd2b854dab7992a4e181899bdd1c6f4.png](https://i-blog.csdnimg.cn/blog_migrate/d4893ae6569060debefb9448c2fbb347.jpeg)
![dbbdc16e55b71a1d97f22c497bd781b0.png](https://i-blog.csdnimg.cn/blog_migrate/c82514a393e3894d88a1e5ae9112cc1e.jpeg)
做好配置文件
简单地讲,我们需要先制作一个配置文件,这里命名为config,然后config文件如以下所示
$ cat config
SRR1039510_1.fastq.gz SRR1039510_2.fastq.gz
SRR1039511_1.fastq.gz SRR1039511_2.fastq.gz
SRR1039512_1.fastq.gz SRR1039512_2.fastq.gz
命令脚本文件
然后把我们的代码写入到一个shell脚本中,这里命名为qc.sh(注:代码中的$1
是后面要传入的config)
$ cat qc.sh
#!/bin/bash
cat $1 |while read id
do
arr=(${id})
fq1=${arr[0]}
fq2=${arr[1]}
trim_galore -q 25 --phred33 \
--length 36 --stringency 3 --paired \
-o ./ $fq1 $fq2
done
提交至后台
最后再提交至后台
nohup bash qc.sh config &
最后的最后,要学会通过top查看命令是否成功提交了,如果提交成功,服务器会一个一个地处理数据,这样我们就可以忙别的事情了,等到数据处理得差不多再看处理结果。
![4789229b113d45475b2fd09cbbaa208e.png](https://i-blog.csdnimg.cn/blog_migrate/b70175289733fa19adc9b13f49a7d794.png)
进阶级
假如你觉得上面一个一个地处理太!慢!了!那你可以看看下面的进阶处理方法
做好配置文件
同样的做一个config
$ cat config
SRR1039510_1.fastq.gz SRR1039510_2.fastq.gz
SRR1039511_1.fastq.gz SRR1039511_2.fastq.gz
SRR1039512_1.fastq.gz SRR1039512_2.fastq.gz
......这里省略若干行......
命令脚本文件
$ cat qc.sh
#!/bin/bash
number1=$2
number2=$3
cat $1 | while read id
do
if((i%$number1==$number2))
then
arr=(${id})
fq1=${arr[0]}
fq2=${arr[1]}
trim_galore -q 25 --phred33 \
--length 36 --stringency 3 --paired \
-o ./ $fq1 $fq2
fi ## end for number1
i=$((i+1))
done
提交至后台
最后再提交至后台
for i in {0..2}
do
(nohup bash qc.sh config 3 $i 1>log.$i.txt 2>&1 & )
done
最后的最后,要学会通过top查看命令是否成功提交了,如果提交成功,服务器会批量处理数据,向这里的例子,每次就同时处理3个数据了,当然前提是服务器的资源足够。
![e3e6a3231753210d27ce0759ab88556b.png](https://i-blog.csdnimg.cn/blog_migrate/d40a0bffa5097f8cb5f487ab8a134586.png)
补充一个错误的例子
命令提交后一定要检查,最简单粗暴的就是用top实时查看运行情况。
同样的,这个例子的配置文件是这样
$ cat config
SRR1039510 SRR1039510_1.fastq.gz SRR1039510_2.fastq.gz
SRR1039511 SRR1039511_1.fastq.gz SRR1039511_2.fastq.gz
SRR1039512 SRR1039512_1.fastq.gz SRR1039512_2.fastq.gz
......这里省略若干行......
脚本是这样(这个脚本是有问题的,我们先留个悬念)
$ cat qc.sh
#!/bin/bash
number1=$2
number2=$3
cat $1 | while read id
do
if [ ! -f ok.trim.$sample.status ]
then
touch ok.trim.$sample.status
echo "start trim for $sample" `date`
arr=(${id})
sample=${arr[0]}
fq1=${arr[1]}
fq2=${arr[2]}
trim_galore -q 25 --phred33 \
--length 36 --stringency 3 --paired \
-o ./ $fq1 $fq2
echo "end trim for $sample" `date`
fi
done
最后提交命令
for i in {0..2}
do
(nohup bash qc.sh config 3 $i 1>log.$i.txt 2>&1 & )
done
top之后仍然可以看到任务在运行,3个(不要以为这样就ok了)
![2db5957f7446dfba2838ddf20cb80361.png](https://i-blog.csdnimg.cn/blog_migrate/7b1dd56f70c5c9ca2e8c875def3480a2.png)
我们检查一下生成的文件,发现生成的文件却只有一个样本的
$ ll -th
-rw-rw-r-- 1 hcguo hcguo 1.2G Jun 18 17:45 SRR1039510_1_trimmed.fq.gz
-rw-rw-r-- 1 hcguo hcguo 1.6K Jun 18 17:45 log.0.txt
-rw-rw-r-- 1 hcguo hcguo 1.6K Jun 18 17:45 log.2.txt
-rw-rw-r-- 1 hcguo hcguo 1.6K Jun 18 17:45 log.1.txt
-rw-rw-r-- 1 hcguo hcguo 544 Jun 18 17:39 SRR1039510_1.fastq.gz_trimming_report.txt
-rw-rw-r-- 1 hcguo hcguo 0 Jun 18 17:39 ok.trim..status
仔细看top命令时,发现3个命令其实处理的是同一个样本,也就是说我们提交的命令有问题,这个时候我们应该进一步查看一下log日志或者nohup.out,看看问题所在(这里不做演示了)
![a6ed689de4e0fd475a7e99c5f3a63d22.png](https://i-blog.csdnimg.cn/blog_migrate/5b9bcd4dc72541c1732b5bd7958e0bca.jpeg)
如果你对上面的代码及图表完全无法理解,那么你可能需要下面的课程:
全国巡讲约你
生信技能树(爆款入门培训课)全国巡讲约你
第一站-重庆 (已结束)
粤港澳大湾区专场 (已结束)
第二站-济南 (已结束)
千呼万唤进北京(已结束)
巡讲-广州和上海(已结束)
郑州和西安(全部结束)
第9、10站-武汉和成都(武汉结束,成都火热报名中)