GNU 并行中的数学
Math in GNU Parallel
我想做的一件事是用 GNU Parallel
中的 {%} 选项做一些数学运算
cat short | parallel -j 2 echo my_prog ----in {} ----out {/.}.extension ----gpu {= {%}+1 =} {= {%}-1 =}
(为了以防万一,我在 in
、out
和 gpu
前面多了一些破折号。)
{= =}
中显示的数学是我需要做的全部,我只是不确定我是否理解如何用 --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' =}
我想做的一件事是用 GNU Parallel
中的 {%} 选项做一些数学运算cat short | parallel -j 2 echo my_prog ----in {} ----out {/.}.extension ----gpu {= {%}+1 =} {= {%}-1 =}
(为了以防万一,我在 in
、out
和 gpu
前面多了一些破折号。)
{= =}
中显示的数学是我需要做的全部,我只是不确定我是否理解如何用 --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' =}