【问题标题】:GNU parallel with two argumentsGNU 并行有两个参数
【发布时间】:2013-02-01 02:06:51
【问题描述】:

我有一个 C-shell 脚本,其中有一个名为 $hosts_string 的变量,形式为:

host1,host2,...,hostN

我还有一个名为$chrs_string 的变量,形式为:

chr1,chr2,...,chrM

我还有一个名为 $inputFn 的变量,它指定了我需要处理的文本文件。

我想做的是让每个主机对$chrs_string 的每个成员运行一个名为doStuff 的命令,将$inputFn 作为输入文件名参数。

我尝试了以下方法:

parallel -S $hosts_string 'doStuff {1} {2} > {1}' ::: {$chrs_string} ::: {$inputFn}

如果这可行,这应该创建文件chr1chrM 作为命令doStuff 的输出,但我什么也没得到。并行完成且未发出错误,但没有输出。

如果我不使用parallel,命令本身可以正常工作,所以不是命令,而是我如何为parallel 指定参数。

为了确认这一点,我尝试了以下方法:

parallel -S $hosts_string 'echo {1} {2} > {1}' ::: {$chrs_string} ::: {$inputFn}

如果 this 可以工作,并且$inputFn 是(例如)/foo/bar,那么我会(例如)获得一个名为 chr1 的文件,其中包含以下字符串:

chr1 /foo/bar

如何调整我的parallel 命令,以便它正确循环$chrs_string$inputFn 的每个组合?

【问题讨论】:

    标签: parallel-processing csh gnu-parallel


    【解决方案1】:

    你很接近。你只是忘了 ::: 和 :::: 不一样

    parallel -S $hosts_string 'echo {1} {2} > {1}' ::: {$chrs_string} :::: {$inputFn}
    

    如果您只想要 echo 中的文件名,您只需这样做:

    parallel -S $hosts_string echo '{1}' {$inputFn} '> {1}' ::: {$chrs_string}
    

    【讨论】:

    • 这不起作用。简单地尝试'echo {1} {2}' 会显示$inputFn 的文本内容,而不是该文件的路径名。这是不正确的行为。
    • 那么我不清楚你想要什么。我已经编辑了我的答案以提供更多想法。如果这不能回答您的问题,请发布“parallel --version”的输出、输入和预期输出。
    猜你喜欢
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 2022-10-07
    相关资源
    最近更新 更多