我对于parallel并行的简单理解即同时执行多个命令语句。尽管目前很多生信软件支持多线程运行(一条命令语句内),但并不是设置的越多就越快,比如trim_galore命令建议对于一对fastq文件,不超过8个线程。因此,如果有多个文件需要处理,想尽可能利用计算机几十个线程的资源,可以使用parallel

1
2
3
4
#使用conda安装可以避免root权限的限制
conda install -c conda-forge parallel

parallel --help

1、基本用法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
##(1) ::: 传递不同遍历值
parallel echo ::: A B C
# A
# B
# C

##(2) --dryrun 仅打印命令,而不执行
parallel --dryrun echo ::: A B C
parallel --dryrun echo {} ::: A B C
parallel --dryrun echo {1} ::: A B C
# echo A
# echo B
# echo C

##(3) 可提供双参数
parallel --dryrun echo {1} and_{2} ::: A B ::: D E
# echo A and_D
# echo A and_E
# echo B and_D
# echo B and_E

parallel --dryrun --xapply echo {1} {2} ::: A B ::: D E
# echo A D
# echo B E

##(4) -j 指定同时执行的命令数,相当于线程数
##    --verbose参数可以在执行命令语句前,先打印出该命令
##    --progress参数可以实时显示任务的完成进度
parallel -j 3 echo chr{}.fa ::: {1..22} X Y Z

2、{}的字符处理

{} – full name 全名 {.} – 以(最后一个)逗号为分隔符的前半部分 {/} – 去除路径 {//} – 仅保留路径

1
2
3
4
5
6
ls
# 1.txt  2.txt  3.txt
parallel echo mv {1} {1.}.doc ::: ./*.txt 
# mv 1.txt 1.doc
# mv 2.txt 2.doc
# mv 3.txt 3.doc

3、文件传递参数/命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
cat chrID.txt
# 1
# 2
# 3
# 4
# 5
# 6
# X
# Y

parallel echo chr{}.fa :::: chrID.txt
## 等同于 cat chrID.txt | parallel echo chr{}.fa
# chr1.fa
# chr2.fa
# chr3.fa
# chr4.fa
# chr5.fa
# chr6.fa
# chrX.fa
# chrY.fa