我对于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
|