首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >批处理: Snakemake,Snakemake还是什么?

批处理: Snakemake,Snakemake还是什么?
EN

Stack Overflow用户
提问于 2017-01-17 13:55:48
回答 2查看 827关注 0票数 3

我需要通过将一组文件传递给matlab或python脚本来处理目录中的一组文件。

对于目录中的每个输入文件FileName.IN,我需要获得一个输出文件FileName.OUT.

解决方案是Python还是bash脚本并不重要。

为了实现我的目标,我尝试了GNU Make (或者),但是我有点被它卡住了。看起来我可以这样说:“嗨,对于每个输出(目标)文件,FileName.out搜索相应的FileName.IN (先决条件)”。

然而,正如前面所说,我想做的正好相反。

  • make (或snakemake)是正确的选择吗?
  • 你还会有什么建议?

我的makefile代码看起来是这样的,但它做不到(我是GNU的新手):

代码语言:javascript
复制
in_files = *.IN
out_files = *.out
$(out_files) : $(in_files)
    matlab -nosplash -nodesktop -r "a_matlab_function('$<','$@')"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-17 14:15:07

我对Snakemake一无所知,但在GNU中,您可以将in_files转换为out_files

代码语言:javascript
复制
in_files = $(wildcard *.IN)
out_files = $(in_files:.IN=.out)

然后创建一个依赖于所有输出的虚拟目标:

代码语言:javascript
复制
all: $(out_files)
.PHONY: all

最后是从一个输入创建一个输出的规则:

代码语言:javascript
复制
%.out: %.IN
    matlab -nosplash -nodesktop -r "a_matlab_function('$<','$@')"
票数 5
EN

Stack Overflow用户

发布于 2017-01-17 14:14:13

我认为您只是想要一个bash for循环:

代码语言:javascript
复制
for f in *.IN; do
   out=${f%IN}OUT                # Work out name of output file
   echo IN:"$f"                  # Show input file to user
   echo OUT:"$out"               # Show output file to user
   matlab <options> "$f" "$out"  # Run Matlab
done

所以,如果我有这些文件

代码语言:javascript
复制
ls *IN

aThird.IN   
another one.IN
b.IN

我去拿这个:

代码语言:javascript
复制
IN:aThird.IN
OUT:aThird.OUT
IN:another one.IN
OUT:another one.OUT
IN:b.IN
OUT:b.OUT

或者,作为一条单线:

代码语言:javascript
复制
for f in *.IN; do out=${f%IN}OUT; matlab ... "$f" ... "$out"; done

Notes

虽然您的问题建议使用make,但没有明确的指示您是否总是期望运行所有作业,或者某些作业有时不需要运行--大概是因为输出文件已经存在,并且没有必要运行它们。如果您不希望每次都运行所有的作业,那么使用make可能会更好。

此外,如果Matlab可以运行并行实例,那么GNU并行语法很适合如下所示:

代码语言:javascript
复制
parallel --dry-run matlab {} {.}.OUT ::: *IN

输出

代码语言:javascript
复制
matlab another\ one.IN another\ one.OUT
matlab aThird.IN aThird.OUT
matlab b.IN b.OUT 

在这里,--dry-run将显示将要运行的命令,尽管它目前没有运行任何命令。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41698983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档