2013-02-16 99 views
1

我有一个称为形式的$hosts_string变量C-shell脚本:GNU并行使用两个参数

host1,host2,...,hostN 

我也有一个变量被称为形式的$chrs_string

chr1,chr2,...,chrM 

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

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

我试过如下:

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

如果一切正常,应通过chrM创建文件chr1从命令doStuff输出,但我什么也没得到。并行完成时不发出错误,但没有输出。

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

为了证实这一点,我试过如下:

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

如果是工作,并$inputFn是(例如)/foo/bar,那么我会得到(例如)一个名为chr1,包含字符串:

chr1 /foo/bar 

如何调整我的parallel命令,使其遍历的$chrs_string和每个组合正确吗?

回答

0

你就近了。你忘记:::是不一样的::::

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

如果你只是想在你只需做回声文件名:

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

这是行不通的。简单地尝试'echo {1} {2}'显示'$ inputFn'的文本内容,而不是该文件的路径名。这是不正确的行为。 – 2013-02-16 10:26:58

+0

然后,我不清楚你想要什么。我编辑了我的答案,以提供更多的想法。如果这不能回答你的问题,请发布'parallel --version'的输出,输入和期望的输出。 – 2013-02-16 13:46:12

+0

和您希望运行的命令。 – 2013-02-16 13:59:46