前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >批量与并行不一样

批量与并行不一样

作者头像
生信技能树
发布2019-06-21 17:00:37
1.2K0
发布2019-06-21 17:00:37
举报
文章被收录于专栏:生信技能树生信技能树
全文目录

入门级做好配置文件命令脚本文件提交至后台进阶级做好配置文件命令脚本文件提交至后台补充一个错误的例子

在使用Linux做NGS数据处理的过程中,批量处理是提高工作效率的好方法。批处理的方法有很多,今天我们就介绍两个不同级别的批处理方法。

入门级

接受过我们生信技能树线下培训的粉丝都知道,,在我们的课程中会介绍一种批处理的方法,如:

做好配置文件

简单地讲,我们需要先制作一个配置文件,这里命名为config,然后config文件如以下所示

代码语言:javascript
复制
$ 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

代码语言:javascript
复制
$ 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
提交至后台

最后再提交至后台

代码语言:javascript
复制
nohup bash qc.sh config &

最后的最后,要学会通过top查看命令是否成功提交了,如果提交成功,服务器会一个一个地处理数据,这样我们就可以忙别的事情了,等到数据处理得差不多再看处理结果。

进阶级

假如你觉得上面一个一个地处理太!慢!了!那你可以看看下面的进阶处理方法

做好配置文件

同样的做一个config

代码语言:javascript
复制
$ 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
......这里省略若干行......
命令脚本文件
代码语言:javascript
复制
$ 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
提交至后台

最后再提交至后台

代码语言:javascript
复制
for i  in {0..2}
do 
(nohup bash qc.sh  config 3 $i 1>log.$i.txt 2>&1 & )
done 

最后的最后,要学会通过top查看命令是否成功提交了,如果提交成功,服务器会批量处理数据,向这里的例子,每次就同时处理3个数据了,当然前提是服务器的资源足够。

补充一个错误的例子

命令提交后一定要检查,最简单粗暴的就是用top实时查看运行情况。

同样的,这个例子的配置文件是这样

代码语言:javascript
复制
$ 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
......这里省略若干行......

脚本是这样(这个脚本是有问题的,我们先留个悬念)

代码语言:javascript
复制
$ 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

最后提交命令

代码语言:javascript
复制
for i  in {0..2}
do 
(nohup bash qc.sh  config 3 $i 1>log.$i.txt 2>&1 & )
done 

top之后仍然可以看到任务在运行,3个(不要以为这样就ok了)

我们检查一下生成的文件,发现生成的文件却只有一个样本的

代码语言:javascript
复制
$ 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,看看问题所在(这里不做演示了)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 入门级
    • 做好配置文件
      • 命令脚本文件
        • 提交至后台
        • 进阶级
          • 做好配置文件
            • 命令脚本文件
              • 提交至后台
              • 补充一个错误的例子
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档