GNU 并行中的数学

Math in GNU Parallel

我想做的一件事是用 GNU Parallel

中的 {%} 选项做一些数学运算
cat short | parallel -j 2 echo my_prog ----in {} ----out {/.}.extension ----gpu {= {%}+1 =} {= {%}-1 =}

(为了以防万一,我在 inoutgpu 前面多了一些破折号。)

{= =} 中显示的数学是我需要做的全部,我只是不确定我是否理解如何用 --rpl--parens[=20= 来写它]

{= =} 是 space 可以用 GNU 并行编写 Perl 表达式的地方。

此外,我的程序不在 运行 此处,我只是回显输出以查看是否一切正确。

有人可以解释一下如何在命令中执行这个简单的数学运算吗?

我的错误是这样的:

parallel: Error: Cannot use {%}+1 : Missing right curly or square bracket at (eval 13) line 2, at end of line
syntax error at (eval 13) line 2, at EOF

问题 #1

您需要转义 Perl 程序,这样它就不会被 shell 处理。在程序周围使用单引号是常用的方法。

问题 #2

看起来 {%}{= =} 中没有被替换,这是有道理的。 {= =} 说“你可以完全访问所有 GNU parallel 的内部函数和数据结构”,所以找到提供插槽的 var/fun 就变成了一个问题数.

问题 #3

插入到命令中的是$_的值,所以需要将和赋值给$_

解决方案

{= '$_ = $job->slot() + 1' =}