명령의 따옴표와 평행

명령의 따옴표와 평행

Linux 터미널의 원래 입력은 다음과 같습니다.


bcftools filter -e 'TYPE="snp"' input1.vcf -O v -o output1.filter.vcf
bcftools filter -e 'TYPE="snp"' input2.vcf -O v -o output2.filter.vcf    
bcftools filter -e 'TYPE="snp"' input3.vcf -O v -o output3.filter.vcf    
bcftools filter -e 'TYPE="snp"' input4.vcf -O v -o output4.filter.vcf    
bcftools filter -e 'TYPE="snp"' input5.vcf -O v -o output5.filter.vcf

이미 다음을 포함하는 parallel.input이라는 파일이 있습니다.


[***@dev1 raw_reads]$ cat parallel.input

input1.vcf
output1.filter.vcf
input2.vcf
output2.filter.vcf
input3.vcf
output3.filter.vcf
input4.vcf
output4.filter.vcf
input5.vcf
output5.filter.vcf

이 명령을 병렬로 사용할 때

cat parallel.input | parallel -j 3 -k --max-args=2 --joblog parallel.log "bcftools filter -e 'TYPE="snp"' {1} -O v -o {2}"

이 오류가 발생했습니다

[filter.c:2278 filters_init1] Error: the tag "snp" is not defined in the VCF header
[filter.c:2278 filters_init1] Error: the tag "snp" is not defined in the VCF header
[filter.c:2278 filters_init1] Error: the tag "snp" is not defined in the VCF header
[filter.c:2278 filters_init1] Error: the tag "snp" is not defined in the VCF header
[filter.c:2278 filters_init1] Error: the tag "snp" is not defined in the VCF header

bcftools 명령에서 참조되었기 때문인 것 같습니다. 하지만 입력으로 참조가 필요합니다.

병렬화를 수행하는 방법을 아시나요?

감사해요

답변1

함수를 사용하세요:

myfunc() {
  bcftools filter -e 'TYPE="snp"' "$1" -O v -o "$2"
}
export -f myfunc

cat parallel.input |
  parallel -j 3 -k --max-args=2 --joblog parallel.log myfunc

관련 정보