首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用gnu-parallel来处理有两个输入的脚本?

如何使用gnu-parallel来处理有两个输入的脚本?
EN

Stack Overflow用户
提问于 2016-02-05 20:15:16
回答 3查看 1K关注 0票数 3

我正在尝试运行具有两个输入的Python脚本,如下所示。我得到了这两个输入中的大约300个,所以我想知道是否有人可以建议如何在并行中运行它们。

单次运行如下所示:

代码语言:javascript
复制
python stable.py KOG_1.fan KOG_1.fasta > KOG_1.stable

我的并行测试不起作用:

代码语言:javascript
复制
ls *.fan; ls *.fasta | parallel python stable.py {} {} > {.}.stable

但我如何指定它必须与_1.fan_1.fasta一起运行;然后与_2.fan_1.fasta等一起运行……直到_300.fan_300.fasta

EN

回答 3

Stack Overflow用户

发布于 2016-02-05 21:20:48

这不是一个真正的Python问题,这是一个关于GNU并行的问题。如果所有文件都以“KOG_”为前缀,您可以尝试这样做:

代码语言:javascript
复制
seq 1 300 | parallel python stable.py KOG_{}.fan KOG_{}.fasta ">" KOG_{.}.stable

重定向(">")两边的引号很重要,除非您希望将所有输出放在一个文件中。

要处理通用前缀,请执行以下操作:

代码语言:javascript
复制
ls *fan *fasta | parallel ---max-lines=2 python stable.py {1} {2} ">" {1.}.stable

这将使用-max-lines选项为每个命令使用2行代码。当然,这只有在*.fan*.fasta文件匹配的情况下才有效,即每个文件必须有相同的数量,并且数量需要匹配,否则您最终会将不应该配对的文件配对。如果这是一个问题,您可以找出一个命令,该命令可以更有力地将对提供给parallel

票数 2
EN

Stack Overflow用户

发布于 2016-02-06 02:29:22

尝试:

代码语言:javascript
复制
parallel python stable.py {} {.}.fasta '>' {.}.stable ::: *fan
票数 1
EN

Stack Overflow用户

发布于 2016-02-05 21:09:11

我建议您将此任务分成两个步骤:

  1. Create一个包含你想要并行执行的所有命令的作业文件。你需要创建一个文本文件jobs.txt,它应该类似于下面给出的文件:

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

如果您的所有文件都以KOG为前缀,则可以这样构建此文件:

对于I in python;使用作业文件执行echo“done;

  • Run stable.py KOG_$I.fan KOG_$I.fasta > KOG_$I.stable”>> jobs.txt;python并行

一旦您有了作业文件,您只需要运行以下命令:

parallel -j4 < jobs.txtNote -j4表示作业文件中最多有4个命令将并行运行。您可以根据计算机上可用内核的数量进行调整。

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

https://stackoverflow.com/questions/35224003

复制
相关文章

相似问题

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