【问题标题】:Math in GNU ParallelGNU Parallel 中的数学
【发布时间】:2016-07-16 01:44:18
【问题描述】:

我正在尝试做的一件事是使用GNU Parallel 中的 {%} 选项完成一些数学运算

cat short | parallel -j 2 echo my_prog ----in {} ----out {/.}.extension ----gpu {= {%}+1 =} {= {%}-1 =}

(我在inoutgpu 前面有额外的破折号,以防万一。)

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

{= =} 是一个可以用 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

【问题讨论】:

  • 抱歉,无法理解您要执行的操作。并行代码意味着您并行运行两个(隔离的)进程。您需要捕获和整理结果。
  • 这是使用 gnu 并行,假设 my_prog 是并行运行的程序。我前面有 echo 只是为了确保我对 my_prog 的所有论点都是正确的。目前在这个例子中,gnu parallels 将并行运行 echo。
  • short 中有什么内容?你从这个命令得到什么结果?为什么你认为这是错误的?对并行作业号{%}进行算术运算似乎很奇怪@
  • short 仅包含目录列表。这些将仅用于那些进出部分。已添加错误。
  • 我假设在这些部分中使用 {= =} 和 {%} 存在冲突。

标签: bash perl gnu-parallel


【解决方案1】:

问题 #1

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

问题 #2

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

问题 #3

这是插入到命令中的$_ 的值,因此您需要将总和分配给$_

解决方案

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

【讨论】:

  • 应测试并回复您。
  • 有效。非常感谢:)
猜你喜欢
  • 2016-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-08
  • 1970-01-01
  • 2012-03-30
  • 2015-11-12
  • 1970-01-01
相关资源
最近更新 更多