Je suis nouveau sur SLURM. Je veux traiter une liste de fichiers assembled_reads/*.sorted.bam
en parallèle. Avec le code ci-dessous, cependant, un seul processus est utilisé encore et encore.Comment traiter une liste de fichiers avec 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
Voir la réponse de damienfrancois ci-dessous. Vous pouvez probablement utiliser un script wrapper qui détermine le nombre de fichiers, puis soumet le script affiché dans sa réponse en utilisant le paramètre '--array' pour spécifier le nombre de fichiers déterminé dans votre script wrapper. –