老板让你完成 100 个样品测序数据的质控

你想,质控我做过,不就 fastqc 嘛,一天搞定

眼看要下班了,老板来要结果,可是你连运行的脚本都没写完

1000个样本啊,一个个改,手酸啊

要不花3分钟学习下 xargs 命令吧


这里是6个样品,共12 个fastq 文件,要进行 fastqc 数据质控

zxd@GenekServer:~/workspace/rna-seq/raw_data$ ll
total 355572
drwxr-xr-x 2 zxd GenekVIP     4096 Apr 11 09:28 ./
drwxr-xr-x 7 zxd GenekVIP     4096 Apr 11 17:26 ../
-rw-r--r-- 1 zxd GenekVIP 25955505 Mar 19 02:39 hcc1395_normal_rep1_r1.fastq.gz
-rw-r--r-- 1 zxd GenekVIP 30766759 Mar 19 02:41 hcc1395_normal_rep1_r2.fastq.gz
-rw-r--r-- 1 zxd GenekVIP 25409781 Mar 19 02:39 hcc1395_normal_rep2_r1.fastq.gz
-rw-r--r-- 1 zxd GenekVIP 30213083 Mar 19 02:41 hcc1395_normal_rep2_r2.fastq.gz
-rw-r--r-- 1 zxd GenekVIP 25132378 Mar 19 02:39 hcc1395_normal_rep3_r1.fastq.gz
-rw-r--r-- 1 zxd GenekVIP 30174637 Mar 19 02:41 hcc1395_normal_rep3_r2.fastq.gz
-rw-r--r-- 1 zxd GenekVIP 30361801 Mar 19 02:34 hcc1395_tumor_rep1_r1.fastq.gz
-rw-r--r-- 1 zxd GenekVIP 35887220 Mar 19 02:36 hcc1395_tumor_rep1_r2.fastq.gz
-rw-r--r-- 1 zxd GenekVIP 29769613 Mar 19 02:34 hcc1395_tumor_rep2_r1.fastq.gz
-rw-r--r-- 1 zxd GenekVIP 35254974 Mar 19 02:36 hcc1395_tumor_rep2_r2.fastq.gz
-rw-r--r-- 1 zxd GenekVIP 29472281 Mar 19 02:34 hcc1395_tumor_rep3_r1.fastq.gz
-rw-r--r-- 1 zxd GenekVIP 35241854 Mar 19 02:36 hcc1395_tumor_rep3_r2.fastq.gz


 

使用 xargs -i 批量生成脚本

zxd@GenekServer:~/workspace/rna-seq/raw_data$ ls *.fastq.gz | xargs -i echo fastqc -o ./ {}
fastqc -o ./ hcc1395_normal_rep1_r1.fastq.gz
fastqc -o ./ hcc1395_normal_rep1_r2.fastq.gz
fastqc -o ./ hcc1395_normal_rep2_r1.fastq.gz
fastqc -o ./ hcc1395_normal_rep2_r2.fastq.gz
fastqc -o ./ hcc1395_normal_rep3_r1.fastq.gz
fastqc -o ./ hcc1395_normal_rep3_r2.fastq.gz
fastqc -o ./ hcc1395_tumor_rep1_r1.fastq.gz
fastqc -o ./ hcc1395_tumor_rep1_r2.fastq.gz
fastqc -o ./ hcc1395_tumor_rep2_r1.fastq.gz
fastqc -o ./ hcc1395_tumor_rep2_r2.fastq.gz
fastqc -o ./ hcc1395_tumor_rep3_r1.fastq.gz
fastqc -o ./ hcc1395_tumor_rep3_r2.fastq.gz


ls *.fastq.gz 会列出所有要操作的文件;xargs 命令通过管道,将上一个命令的输出作为自己的输入;-i 参数的意思是按行处理,并且会将每行的内容存到一个特殊变量 {} 里;echo fastqc -o ./ {} 是要对每一行执行的命令;{} 代表每一行的内容。

这么多样品,明早要结果,要并行计算才行 在命令结尾添加 &,注意需要转义,前面加 \

zxd@GenekServer:~/workspace/rna-seq/raw_data$ ls *.fastq.gz| xargs -i echo fastqc -o ./ {} \&
fastqc -o ./ hcc1395_normal_rep1_r1.fastq.gz &
fastqc -o ./ hcc1395_normal_rep1_r2.fastq.gz &
fastqc -o ./ hcc1395_normal_rep2_r1.fastq.gz &
fastqc -o ./ hcc1395_normal_rep2_r2.fastq.gz &
fastqc -o ./ hcc1395_normal_rep3_r1.fastq.gz &
fastqc -o ./ hcc1395_normal_rep3_r2.fastq.gz &
fastqc -o ./ hcc1395_tumor_rep1_r1.fastq.gz &
fastqc -o ./ hcc1395_tumor_rep1_r2.fastq.gz &
fastqc -o ./ hcc1395_tumor_rep2_r1.fastq.gz &
fastqc -o ./ hcc1395_tumor_rep2_r2.fastq.gz &
fastqc -o ./ hcc1395_tumor_rep3_r1.fastq.gz &
fastqc -o ./ hcc1395_tumor_rep3_r2.fastq.gz &

 

我要回家吃饭了,在后台运行吧, 前面加 nohup

zxd@GenekServer:~/workspace/rna-seq/raw_data$ ls *.fastq.gz| xargs -i echo nohup fastqc -o ./ {} \&
nohup fastqc -o ./ hcc1395_normal_rep1_r1.fastq.gz &
nohup fastqc -o ./ hcc1395_normal_rep1_r2.fastq.gz &
nohup fastqc -o ./ hcc1395_normal_rep2_r1.fastq.gz &
nohup fastqc -o ./ hcc1395_normal_rep2_r2.fastq.gz &
nohup fastqc -o ./ hcc1395_normal_rep3_r1.fastq.gz &
nohup fastqc -o ./ hcc1395_normal_rep3_r2.fastq.gz &
nohup fastqc -o ./ hcc1395_tumor_rep1_r1.fastq.gz &
nohup fastqc -o ./ hcc1395_tumor_rep1_r2.fastq.gz &
nohup fastqc -o ./ hcc1395_tumor_rep2_r1.fastq.gz &
nohup fastqc -o ./ hcc1395_tumor_rep2_r2.fastq.gz &
nohup fastqc -o ./ hcc1395_tumor_rep3_r1.fastq.gz &
nohup fastqc -o ./ hcc1395_tumor_rep3_r2.fastq.gz &

 

运行的脚本要有存档,出错了才好追溯,输出到 fastqc.sh

ls *.fastq.gz| xargs -i echo nohup fastqc -o ./ {} \& >fastqc.sh


参考基因课视频:原始数据指控及批量生成脚本的技巧