同时运行多行bash

时间:2017-03-15 23:34:06

标签: bash fastq

所以我正在处理集群中的脚本,我需要运行它:

convert_fastaqual_fastq.py -f ITS_C1-5_rRNA.fq -c fastq_q_to_fastaqual
convert_fastaqual_fastq.py -f ITS_C3-2_rRNA.fq -c fastq_q_to_fastaqual
convert_fastaqual_fastq.py -f ITS_C3-3_rRNA.fq -c fastq_q_to_fastaqual
convert_fastaqual_fastq.py -f ITS_C3-5_rRNA.fq -c fastq_q_to_fastaqual
convert_fastaqual_fastq.py -f ITS_C4-5_rRNA.fq -c fastq_q_to_fastaqual
convert_fastaqual_fastq.py -f ITS_C5-1_rRNA.fq -c fastq_q_to_fastaqual
convert_fastaqual_fastq.py -f ITS_C5-4_rRNA.fq -c fastq_q_to_fastaqual
convert_fastaqual_fastq.py -f ITS_C5-5_rRNA.fq -c fastq_q_to_fastaqual

如您所见,每条线都不同,每条线需要2天才能运行。 该命令的作用是将样本转换为两种不同的格式,但是从样本到样本。 我想要的是,当我运行脚本时,所有样本同时运行。

难看的解决方案是为每个样本生成一个文件,并在群集中的不同CPU上一次运行一个文件。我希望同时在同一时间运行一个作业。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作,在后台启动每项作业,然后等待所有这些作业。模式ITS_C?-?_rRNA.fq将匹配您指定的每个作业。

i=0
for file in ITS_C?-?_rRNA.fq; do
    convert_fastaqual_fastq.py \
        -f "$file" -c fastq_q_to_fastaqual \
        1>> job"$i".out \
        2>> job"$i".err &
    ((i++))
done

wait

如果您想了解哪些作业失败的更多信息,您可以执行类似此操作而不是wait(请注意,这需要您跟踪哪个pid与哪个文件相关联)

for job in $(jobs -p); do
    if wait "$job"; then
        printf "job %s succeeded\n" "$job"
    else
        printf "job %s failed\n" "$job"
    fi
done