GNU与两个参数并行

时间:2013-02-16 01:16:30

标签: parallel-processing csh gnu-parallel

我有一个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}

如果这样做,这应该创建文件chr1chrM作为命令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的每个组合?

1 个答案:

答案 0 :(得分:1)

你很亲密。你刚忘了:::和::::

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

如果你只想要echo中的文件名,你只需:

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