在GNU Parallel中增加变量

3
如何在parallel中使用增量变量?请注意输出文件名(前缀)中的$int变量。我知道顺序可能会改变,但可以为下游工作添加整数前缀非常有用(${array[@]}的长度会发生更改)。
我正在尝试将此for循环转换为可在集群上运行的好的并行cmd。我非常喜欢的一个功能是,如果任何作业具有非零退出状态,则停止此进程,如此处所述:https://www.gnu.org/software/parallel/parallel_tutorial.html#Termination
var='infile.txt'
int=1
for file in ${array[@]}; do
  script.rb -i $var -o $int_$file
  ((int+=1))
done

收件人:

parallel --halt soon,fail=1 --jobs $NSLOTS script.sh -i $var -o int_{} ::: ${array[@]}

我认为使用 {1..array_len} 结构作为计数器可能会起到一定作用,但是这个命令并不能实现: parallel --halt soon,fail=1 --jobs $NSLOTS script.sh -i $var -o {2}_{1} :::: ${array[@]} {1..${#array[@]}}

1个回答

4
我想你需要这个:
parallel --halt soon,fail=1 script.rb -i $var -o {#}_{} ::: ${array[@]}

其中{#}是任务序列号。


这里是一个简单的例子:

parallel -k echo "param="{} ",sequence="{#} ::: 2 4 6 8

param=2 ,sequence=1
param=4 ,sequence=2
param=6 ,sequence=3
param=8 ,sequence=4

https://www.gnu.org/software/parallel/parallel_tutorial.html#Replacement-strings 对此进行了解释,但我不理解它作为计数器的用法,谢谢! - lcb
抱歉!谢谢。 - Mark Setchell

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