2013-02-08 2 views
2

내 생물 정보 워크 플로는 의 '-j'옵션을 사용하여 데이터를 병렬로 처리합니다.. Make : 파일 및 병렬 분할

mutations.tsv : file1.data file2.data file3.data 
     find-mutations $^ > [email protected] 

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

mutations.tsv

는 병목하지만

1) 나는 file1.data의 file2.data

2) 실행에 서로 다른 염색체의 수를 찾을 수 있다면 더 빠른 일이 될 수있다 각각의 염색체

3) 'mutations.tsv'

뭔가 리에서 모든 결과를 병합 '- 돌연변이를 찾아' ke :

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

어떻게 이것을 변경하여 병렬 처리 된 워크 플로우를 만들 수 있습니까?

참고 :이 메이크 파일은 그 자체로 즉석에서 생성됩니다. 나는 Makefile을 작성하기 전에 염색체의 수를 모르는, 그래서 나는 다음과 같은 솔루션을 사용할 수 없습니다

mutations.tsv : chr1.tsv chr2.tsv chr3.tsv chr4.tsv 
      cat $^ > [email protected] 

chr1.tsv: file1.data file2.data file3.data 
     grep chr1 $^| find-mutations - > [email protected] 

chr2.tsv: .... 

답변

0

을 당신이 할 수 없다고 솔루션은 바른 길에 생각합니다. wildcard을 사용하면 chr 파일의 변수 번호를 선택할 수 있습니다. 예 :

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

mutations.tsv : $(chrs) 
      cat $^ > [email protected] 

$(chrs): $(files) 
     grep chr1 $^| find-mutations - > [email protected]