Make:拆分文件和并行化

时间:2013-02-08 08:43:18

标签: parallel-processing makefile bioinformatics

我的生物信息学工作流使用 make 的选项'-j'并行处理数据。

mutations.tsv : file1.data file2.data file3.data
       find-mutations $^ > $@

file1.data: raw1.txt
        (....)
(...)

mutation.tsv 是一个瓶颈,但如果

,事情会更快

1)我可以在file1.data file2.data

中找到不同染色体的数量

2)为每条染色体运行'find-mutation'

3)将所有结果合并在'mutation.tsv'

类似的东西:

mutations.tsv : file1.data file2.data file3.data
       for CHROM in `cut -d ' ' -f 1 $< | sort -u` ; do grep $${CHROM} $^| find-mutations -  >> $@ ; done

如何更改此项以创建并行化工作流程?

注意:此makefile本身就是生成的。我在创建Makefile之前不知道染色体的数量,所以我不能使用以下解决方案:

mutations.tsv  : chr1.tsv chr2.tsv chr3.tsv chr4.tsv
            cat $^ > $@

chr1.tsv: file1.data file2.data file3.data
        grep chr1 $^| find-mutations -  > $@

chr2.tsv: ....

1 个答案:

答案 0 :(得分:0)

我认为你所说的无法解决的问题是正确的。您可以使用wildcard来获取可变数量的chr文件。例如:

chrs = $(wildcard chr*.tsv)
files = $(wildcard file*.data)

mutations.tsv : $(chrs)
            cat $^ > $@

$(chrs): $(files)
        grep chr1 $^| find-mutations -  > $@