2016-11-24 87 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

相关问题