Parallel processing 带两个参数的GNU并行
我有一个C-shell脚本,其中包含一个名为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的命令,将$
$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”的输出、输入和预期输出。