运行多行同时bash

Run multiple lines at the same time bash

所以我正在集群中编写脚本,我需要 运行 这个:

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 上一次生成一个文件。我想要同时并行完成一项工作 运行ning。

谢谢!

您可以像这样在后台启动每个作业,然后等待所有作业。模式 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