2017-08-09 63 views
2

我是SLURM的新手。我想要並行處理文件列表assembled_reads/*.sorted.bam。使用下面的代碼,但是隻有一個進程被重複使用。如何使用SLURM處理文件列表

#!/bin/bash 
# 
#SBATCH --job-name=**** 
#SBATCH --ntasks=1 
#SBATCH --cpus-per-task=24 
#SBATCH --partition=short 
#SBATCH --time=12:00:00 
#SBATCH --array=1-100 
#SBATCH --mem-per-cpu=16000 
#SBATCH --mail-type=FAIL 
#SBATCH --mail-user=****@***.edu 
srun hostname 

for FILE in assembled_reads/*.sorted.bam; do 
    echo ${FILE} 
    OUTFILE=$(basename ${FILE} .sorted.bam).raw.snps.indels.g.vcf 
    PLDY=$(awk -F "," '$1=="$FILE"{print $4}' metadata.csv) 
    PLDYNUM=$([[$PLDY = "haploid" ]] && echo "1" || echo "2") 

    srun java -Djava.io.tmpdir="tmp" -jar GenomeAnalysisTK.jar \ 
    -R scaffs_HAPSgracilaria92_50REF.fasta \ 
    -T HaplotypeCaller \ 
    -I ${${SLURM_ARRAY_TASK_ID}} \ 
    --emitRefConfidence GVCF \ 
    -ploidy $PLDYNUM \ 
    -nt 1 \ 
    -nct 24 \ 
    -o $OUTFILE 
    sleep 1 # pause to be kind to the scheduler 
done 
+0

請參閱下面的damienfrancois的答案。您可能可以使用一個包裝腳本來確定文件數量,然後使用'--array'參數提交他的答案中顯示的腳本,以指定包裝腳本中確定的文件數量。 –

回答

2

您正在創建一個作業數組,但未使用它。您應該基於對SLURM作業陣列ID文件的索引替換for循環:

#!/bin/bash 
# 
#SBATCH --job-name=**** 
#SBATCH --ntasks=1 
#SBATCH --cpus-per-task=24 
#SBATCH --partition=short 
#SBATCH --time=12:00:00 
#SBATCH --array=1-100 
#SBATCH --mem-per-cpu=16000 
#SBATCH --mail-type=FAIL 
#SBATCH --mail-user=****@***.edu 
srun hostname 
FILES=(assembled_reads/*.sorted.bam)  
FILE=${FILES[$SLURM_TASK_ARRAY_ID]} 

echo ${FILE} 
OUTFILE=$(basename ${FILE} .sorted.bam).raw.snps.indels.g.vcf 
PLDY=$(awk -F "," '$1=="$FILE"{print $4}' metadata.csv) 
PLDYNUM=$([[$PLDY = "haploid" ]] && echo "1" || echo "2") 

srun java -Djava.io.tmpdir="tmp" -jar GenomeAnalysisTK.jar \ 
    -R scaffs_HAPSgracilaria92_50REF.fasta \ 
    -T HaplotypeCaller \ 
    -I ${${SLURM_ARRAY_TASK_ID}} \ 
    --emitRefConfidence GVCF \ 
    -ploidy $PLDYNUM \ 
    -nt 1 \ 
    -nct 24 \ 
    -o $OUTFILE 

只要確保的--array值調整爲等於要處理的文件的數量。

+0

哇。我記得幾次使用LSF作業數組,並且必須在文件名中包含連續的數字。這更靈活! –

+0

用這個文件作爲輸入傳遞給每個迭代。我需要幾天的時間才能完成這個工作,因爲我很晚纔回應 – user1952312