【问题标题】:Invalid Arithmetic Operator Inside Awkawk 中的算术运算符无效
【发布时间】:2014-04-30 02:38:17
【问题描述】:

我正在尝试通过 awk 解决 bash 的浮点算术限制,但我遇到了一个语法错误,我在识别时遇到了问题。

declare -a mreal=()
for s in $(seq 0 $(( ${#mint_est[@]} - 1 )))
do
    mreal=( "${mreal[@]}" "$(echo ${mreal_est[$s]} | \
        awk -v int="${mint_est[$s]}" -v tot="$mtotal" \
        '{printf("%s", $1 + (1.0 - int/$1)*tot)}')" )
done

这里mreal_estmint_est 是由4 个浮点值组成的数组,mtotal 是一个设置为浮点值的变量。来自 awk 的语法错误是:

awk: {printf("%s", $1 + (1.0 - int/$1)*tot)}
awk:                              ^ syntax error
awk: {printf("%s", $1 + (1.0 - int/$1)*tot)}
awk:                                  ^ syntax error
awk: {printf("%s", $1 + (1.0 - int/$1)*tot)}
awk:                                       ^ syntax error

对于循环中的每次迭代。我正在尝试根据 awk 的printf 语句中定义的算术来填充数组mreal。有什么想法可以纠正吗?

【问题讨论】:

  • 如何改正?脚本是否在做一些不受欢迎的事情,如果是,是什么?发布一些小样本输入和预期输出。
  • @EdMorton 是的,循环中的每次迭代我都会遇到三个语法错误。我将编辑问题以突出显示错误。我期望 mreal 数组根据 awk 的 printf 语句中定义的算术填充 4 个浮点值。
  • awk 在浮点方面也不是特别出色,尽管它至少有一些功能,这使它在该领域领先于bash。您可能想查看bc...

标签: arrays bash awk


【解决方案1】:

int()是一个awk函数,不能用int作为变量名:

$ gawk -v int=7 'BEGIN{print int}'
gawk: cmd. line:1: BEGIN{print int}
gawk: cmd. line:1:                ^ parse error

$ gawk -v xint=7 'BEGIN{print xint}'
7

【讨论】:

  • 就是这样——我的错。感谢您为我突出显示此错误。
猜你喜欢
  • 2013-08-17
  • 2018-08-17
  • 2019-04-16
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 2012-07-05
相关资源
最近更新 更多