2017-03-15 53 views
1

所以我工作在一個集羣中的腳本,我需要運行這個命令:潤多行同時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上一次運行一個文件。我希望單個作業能夠同時並行運行。

謝謝!

+1

你可以產生不同的進程。在每行末尾加上'&'應該是最好的選擇。如果你想跟蹤每個實例的日誌,你應該看看'nohup'實用程序。 – ddnomad

+0

我應該在最後添加一個「等待」嗎? –

+0

請參閱下面的完整答案的作者。我個人認爲沒有必要'等待',但我可能會錯過什麼。 – ddnomad

回答

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 
+0

使它工作!謝謝! –