2016-11-24 106 views
1

我在不同文件夾中有幾個同名文件。我想要並行執行我的bash腳本。是否有可能將它們放在一個單獨的.txt文件或在同一bash腳本和執行?即對不同文件夾中的文件執行bash腳本

all.tab文件

path/to/set1/my.bam 
path/to/set2/my.bam 
path/to/set3/my.bam 

和慶典,

#!/usr/bin/env bash 
#$ -q cluster_name 
#$ -cwd 
#$ -N job_name 
#$ -e /path/to/log 
#$ -o /path/to/log 
#$ -l job_mem=16G 
#$ -pe serial 4 

PICARD="path/to/picard" 
BAM="/path/to/all.tab" 

echo "validating bam file" 

$PICARD/picard.jar ValidateSamFile I=$BAM MODE=SUMMARY 

所以它將啓動多個作業並行編寫並在相應的文件夾中寫入日誌輸出或其他輸出文件。 如果有任何其他方式,我感謝任何幫助。 編輯:我調用它爲:使用qsub ./test.sh

+0

如何調用shell腳本和哪些文件來調用? – Inian

+0

你的意思是'qsub ./test.sh path/to/set1/my.bam','qsub ./test.sh path/to/set2/my.bam'等等? – Inian

+0

不,因爲我希望腳本在變量BAM上執行,它將採用標籤文件中的所有文件。我很抱歉,如果它令人困惑.. – user3224522

回答

2

您可以依次使用find命令首先「發現」的所有文件與目錄結構內的名字。

然後你可以使用xargs使用它的「-p」選項,以便在並行上找到該輸出運行命令。

查看here瞭解更多詳情。

+0

嗨,所以我沒有使用並行,但這不是我正在尋找的東西,我需要像數組這樣的數組,其中一個命令行適用於數百個文件。 – user3224522

0

我正在尋找這樣的東西(但可能是更優雅的方式存在)。

PICARD="path/to/picard" 
BAMFILES="path/to/set1/test.bam 
path/to/set2/test.bam 
path/to/set3/test.bam" 

for f in $BAMFILES 
do 
    $PICARD/picard.jar ValidateSamFile I=$f MODE=SUMMARY 
done 
+0

也許你應該澄清**你自己的想法。你談論平行做事;但你自己的解決方案...不。你看,你的小腳本不過是其他一些(基於Java的)工具的包裝。如果您的腳本被調用了50次,它會有什麼不同?或者如果腳本被調用了1次,但是隨後循環了50個以上的條目?嚴重:如果你想並行**做**,那麼就看看我的解決方案。正如一般情況:只是嘗試建立在現有工具之上而不是重新創建自己的工具。 – GhostCat

+0

這是一個例子。我在這裏發佈我的問題以獲得一些建議。我正在研究你的解決方案,但是對於一個以慶典開始的人來說,這並不是那麼簡單。無論如何感謝 – user3224522

+1

好吧,明白了。並提示bash新手:嘗試使用bash腳本來做**少**事情。是的,你可以用bash編寫很多東西,但是當你剛剛開始使用它時,會出現一些**錯誤。因此:如果你發現沒有你編寫bash代碼的解決方案,更喜歡那些。 – GhostCat

相關問題