【问题标题】:GNU Parallel multiple sets of commandsGNU Parallel 多组命令
【发布时间】:2014-11-24 17:19:11
【问题描述】:

我想使用 GNU Parallel 来运行具有两个不同参数和两个不同 glob 的相同命令。例如,我希望运行以下作业:

mycmd A apples1
mycmd A apples2
mycmd A apples3
mycmd B bananas1
mycmd B bananas2

我可以通过两个单独的电话来做到这一点,但这违背了通过一个电话来管理我的工作的目的parallel。有什么办法吗?

parallel mycmd A ::: apples*
parallel mycmd B ::: bananas*

【问题讨论】:

    标签: gnu-parallel


    【解决方案1】:

    我假设你不希望你的苹果有 Bs。否则就这么简单:

    parallel mycmd ::: [A-Z] ::: [a-z]*
    

    如果 A 可以计算为第二个参数的第一个字符,您可以从版本 20140722 开始执行此操作:

    parallel mycmd '{= $_=uc(substr($_,0,1)) =}' {} ::: [a-z]*
    

    如果你有一个苹果列表和对应的As这样的:

    A,apples1
    A,apples2
    B,bananas1
    B,bananas2
    B,bananas3
    

    然后你可以在 ,: 上拆分:

    cat file | parallel --colsep , mycmd {1} {2}
    

    如果这也不是您的输入方式,那么您需要更多地解释一下您是如何获得 As 和 apples 的。

    【讨论】:

    • 正确,我不希望 Bs 和苹果在一起。 A 不能从其他参数计算;我现在一直在做的是将列表手动构建为文件,就像您在最后一个示例中所做的那样。