当使用选项--eta调用时,GNU Parallel计算要运行的作业总数。有没有办法让shell可以使用这个值,可能还有一个替换字符串?
除了其他方面,这对零填充作业号也很有用。例如,如果作业总数的替换字符串为{###},则可以按如下方式执行零填充:
printf "%0$(printf {###} | wc -m)d" {#}
答案 0 :(得分:0)
目前无法做到这一点。
原因是计算GNU Parallel必须构建要执行的命令的作业数。如果你使用-X,那么作业的数量取决于替换字符串的长度,因此GNU Parallel在开始构建第一个命令时不知道作业的数量。只有在构建了所有命令时,GNU Parallel才知道有多少命令。
要理解为什么这个问题要看这个悖论。以下哪一项应该是正确的:
$ seq 1000 1010 | parallel -Xj1 -s 17 echo {###} {}
6 1000 1001
6 1002 1003
6 1004 1005
6 1006 1007
6 1008 1009
6 1010
或者:
$ seq 1000 1010 | parallel -Xj1 -s 17 echo {###} {}
11 1000
11 1001
11 1002
11 1003
11 1004
11 1005
11 1006
11 1007
11 1008
11 1009
11 1010
你可以说它们都是正确的。