2016-02-05 59 views
2

我想用兩個輸入運行Python腳本,如下所示。我得到了這兩個輸入中的~300個,所以我想知道是否有人可以建議如何並行運行它們。如何使用gnu-parallel處理帶有兩個輸入的腳本?

的單次運行的樣子:

python stable.py KOG_1.fan KOG_1.fasta > KOG_1.stable 

我與並行測試它不工作:

ls *.fan; ls *.fasta | parallel python stable.py {} {} > {.}.stable 

但我怎麼指定一個已經與_1.fan_1.fasta運行;然後_2.fan_1.fasta依此類推......直到_300.fan_300.fasta

+1

它不應該是_2.fasta第二次? – Rainer

+0

刪除了無用的短語。它們在SO上已棄用,請不要將它們添加回來。 –

回答

0

,我建議你在兩個步驟拆分此任務:

  1. 創建包含要與 並行運行的所有命令的工作文件。 您需要創建一個文本文件jobs.txt,應該是類似於波紋管所呈現的一個:如果您的所有文件與KOG前綴

    python stable.py KOG_1.fan KOG_1.fasta > KOG_1.stable 
    python stable.py KOG_2.fan KOG_2.fasta > KOG_2.stable 
    python stable.py KOG_3.fan KOG_3.fasta > KOG_3.stable 
    python stable.py KOG_4.fan KOG_4.fasta > KOG_4.stable 
    ... 
    python stable.py KOG_300.fan KOG_300.fasta > KOG_300.stable 
    

    ,你可以建立這個文件是這樣的:

    for I in `seq 300`; do echo "python stable.py KOG_$I.fan KOG_$I.fasta > KOG_$I.stable" >> jobs.txt; done; 
    
  2. 運行並行使用工作文件

    一旦你的工作文件,你只需要運行下面的命令:

    parallel -j4 < jobs.txt  
    

    請注意,-j4表示至多4個來自作業文件的命令將並行運行。您可以根據計算機上可用的內核數量進行調整。

+0

謝謝你的迴應。我嘗試了選項1,它工作得很好! –

1

這不是一個真正的Python問題,它是一個關於GNU並行的問題。如果所有的文件都以「KOG_」爲前綴你可以試試這個:

seq 1 300 | parallel python stable.py KOG_{}.fan KOG_{}.fasta ">" KOG_{.}.stable 

周圍的重定向(">")的報價是很重要的,除非你想在一個文件中所有的輸出。

爲了處理通用的前綴:

ls *fan *fasta | parallel ---max-lines=2 python stable.py {1} {2} ">" {1.}.stable 

這使用-max-lines選項來利用每個命令2行。當然這隻在*.fan*.fasta文件匹配時才起作用,即每個文件必須有相同的編號,並且這些編號需要匹配,否則最終會配對不應該配對的文件。如果這是一個問題,你可以找出一個命令,這個命令將更強大地將對輸入parallel

+0

謝謝。我會修改這個問題。是的,它的確是一個GNU平行的問題。我是GNU新手,但我發現它非常有用。我正在使用一個mac,所以嘗試切換像GNU-sed這樣的基於GNU的thins。 –

+0

非常感謝您使用seq 1 300完美工作的完美版本。幸運的是,我的所有文件都具有相同的前綴KOG_,並且也進行了配對。你讓我的一天開始輝煌。 –

1

嘗試:

parallel python stable.py {} {.}.fasta '>' {.}.stable ::: *fan 
相關問題