Parallel processing 带两个参数的GNU并行

Parallel processing 带两个参数的GNU并行,parallel-processing,csh,gnu-parallel,Parallel Processing,Csh,Gnu Parallel,我有一个C-shell脚本,其中包含一个名为$hosts\u string的变量,其形式如下: host1,host2,...,hostN chr1,chr2,...,chrM 我还有一个名为$chrs\u string的变量,其形式如下: host1,host2,...,hostN chr1,chr2,...,chrM 我还有一个名为$inputFn的变量,它指定了我需要处理的文本文件 我想做的是让每个主机在$chrs\u string的每个成员上运行一个名为doStuff的命令,将$

我有一个C-shell脚本,其中包含一个名为
$hosts\u string
的变量,其形式如下:

host1,host2,...,hostN
chr1,chr2,...,chrM
我还有一个名为
$chrs\u string
的变量,其形式如下:

host1,host2,...,hostN
chr1,chr2,...,chrM
我还有一个名为
$inputFn
的变量,它指定了我需要处理的文本文件

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

我尝试了以下方法:

parallel -S $hosts_string 'doStuff {1} {2} > {1}' ::: {$chrs_string} ::: {$inputFn}
parallel -S $hosts_string 'echo {1} {2} > {1}' ::: {$chrs_string} ::: {$inputFn}
如果这样做有效,应该通过
chrM
创建文件
chr1
,作为命令
doStuff
的输出,但我什么也得不到。并行完成时不会发出错误,但没有输出

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

为了证实这一点,我尝试了以下方法:

parallel -S $hosts_string 'doStuff {1} {2} > {1}' ::: {$chrs_string} ::: {$inputFn}
parallel -S $hosts_string 'echo {1} {2} > {1}' ::: {$chrs_string} ::: {$inputFn}
如果这是可行的,
$inputFn
是(例如)
/foo/bar
,那么(例如)我会得到一个名为
chr1
的文件,其中包含以下字符串:

chr1 /foo/bar

如何调整我的
parallel
命令,使其在
$chrs\u string
$inputFn
的每个组合上正确循环?

您已经接近了。你只是忘了:::和:::不一样

parallel -S $hosts_string 'echo {1} {2} > {1}' ::: {$chrs_string} :::: {$inputFn}
如果您只想在回显中显示文件名,只需执行以下操作:

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

这是行不通的。只要尝试
'echo{1}{2}'
就会显示
$inputFn
的文本内容,而不是该文件的路径名。这是不正确的行为。那么我不清楚你想要什么。我编辑了我的答案,以提供更多的想法。如果这不能回答您的问题,请发布“parallel--version”的输出、输入和预期输出。