我有一个C-shell脚本,其中包含一个名为$hosts_string
的变量:
host1,host2,...,hostN
我还有一个名为$chrs_string
的变量:
chr1,chr2,...,chrM
我还有一个名为$inputFn
的变量,它指定了我需要处理的文本文件。
我想要做的是让每个主机在doStuff
的每个成员上运行一个名为$chrs_string
的命令,将$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}
如果这个起作用,$inputFn
是(例如)/foo/bar
,那么我会得到(例如)一个名为chr1
的文件,包含字符串:
chr1 /foo/bar
如何调整parallel
命令,使其正确循环遍历$chrs_string
和$inputFn
的每个组合?
答案 0 :(得分:1)
你很亲密。你刚忘了:::和::::
不一样parallel -S $hosts_string 'echo {1} {2} > {1}' ::: {$chrs_string} :::: {$inputFn}
如果你只想要echo中的文件名,你只需:
parallel -S $hosts_string echo '{1}' {$inputFn} '> {1}' ::: {$chrs_string}