Awk中的算术运算符无效

时间:2014-04-29 18:19:33

标签: arrays bash awk

我正在尝试通过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的mreal语句中定义的算法,使用浮点值填充数组printf。有什么想法可以纠正吗?

1 个答案:

答案 0 :(得分:4)

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