GNU Parallel 两个参数用法

3
我有一个C Shell脚本,其中有一个名为$hosts_string的变量,其格式如下:
host1,host2,...,hostN

我还有一个名为$chrs_string的变量,其格式为:

chr1,chr2,...,chrM

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

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

我尝试了以下方法:

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

如果这个方法行得通的话,它应该可以通过doStuff命令创建chr1chrM的文件作为输出,但我什么也没有得到。并行执行没有发出错误,但没有输出。
如果我不使用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个回答

1

你很接近了。你只是忘记了 ::: 不同于 ::::

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

如果您只想在echo中获取文件名,可以这样做:
parallel -S $hosts_string echo '{1}' {$inputFn} '> {1}' ::: {$chrs_string}

这样不起作用。仅尝试使用'echo {1} {2}'会显示$inputFn的文本内容,而不是该文件的路径名。这不是正确的行为。 - Alex Reynolds
那么我不清楚你想要什么。我已经编辑了我的答案,提供更多的想法。如果这不能回答你的问题,请发布“parallel --version”的输出、输入和期望输出。 - Ole Tange

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接