我有一个 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}
如果这可行,这应该创建文件 chr1
到 chrM
作为命令 doStuff
的输出,但我什么也没得到。并行完成而没有发出错误,但没有输出。
如果我不使用 parallel
,命令本身可以正常工作,所以这不是命令,而是我如何为 parallel
指定参数。
为了确认这一点,我尝试了以下操作:
parallel -S $hosts_string 'echo {1} {2} > {1}' ::: {$chrs_string} ::: {$inputFn}
如果 this 可以工作,并且 $inputFn
是(例如)/foo/bar
,那么我会得到(例如) 一个名为 chr1
的文件,其中包含字符串:
chr1 /foo/bar
如何调整我的 parallel
命令,以便它正确地遍历 $chrs_string
和 $inputFn
的每个组合?
最佳答案
你很接近。你只是忘了::: 和::: 不一样
parallel -S $hosts_string 'echo {1} {2} > {1}' ::: {$chrs_string} :::: {$inputFn}
如果你只想要回显中的文件名,你只需这样做:
parallel -S $hosts_string echo '{1}' {$inputFn} '> {1}' ::: {$chrs_string}
关于parallel-processing - GNU parallel 有两个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14905883/