3

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

host1,host2,...,hostN

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

chr1,chr2,...,chrM

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

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

我尝试了以下方法:

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

如果这可行,这应该chr1通过chrM命令的输出创建文件doStuff,但我什么也没得到。并行完成而没有发出错误,但没有输出。

如果我不使用命令本身就可以正常工作parallel,所以它不是命令,而是我如何为parallel.

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

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

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

chr1 /foo/bar

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

4

1 回答 1

1

你很亲密。您只是忘记了 ::: 与 :::: 不同

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

如果您只想要 echo 中的文件名,您只需执行以下操作:

parallel -S $hosts_string echo '{1}' {$inputFn} '> {1}' ::: {$chrs_string}
于 2013-02-16T01:30:39.410 回答