【问题标题】:AWK division by zero errorAWK 除以零错误
【发布时间】:2012-02-03 05:13:58
【问题描述】:

我的 awk 命令出现除以 0 的错误。我不确定是什么原因造成的,因为结果不应该是 0。

在这种情况下,它应该从 1.7229/1.5444 打印 1.11557887。

我分配变量的方式有问题吗?

这是我的脚本:

#!/usr/bin/awk -f

FNR == 22 { measC = $2 }
FNR == 23 { refC = $2 }
factorC = refC / measC
{ print factorC }

返回:

/usr/bin/awk: division by zero
 input record number 1, file 1.txt
 source line number 5

这是我的输入数据的样子:

#!xxx x
# x x x x x x
# x: x x
# x: x x
# x: x x x x x
# (x) x x, x x x, x.
x: x x x x
x: 3.0.0
x: x
x: 0
x: x x
x: 0
x: x x
x: x
x: 0
x: 0
x: 2
x: x x x
x: x
x: 1
x: 4
origmax: 1.5444 1.5188 1.0221 1.4932
currentmax: 1.7229 1.6888 1.1069 1.6238

【问题讨论】:

    标签: unix awk


    【解决方案1】:

    因为您将factorC = refC / measC 放在块之外,所以awk 认为您想将该表达式用作模式。因此,它会为每一行输入评估该表达式。在输入的第一行,measC 尚未定义,因此默认为零。

    我想你想要这个:

    #!/usr/bin/awk -f
    
    FNR == 22 { measC = $2 }
    FNR == 23 { refC = $2 }
    END {
        factorC = refC / measC
        print factorC
    }
    

    或者这个:

    #!/usr/bin/awk -f
    
    FNR == 22 { measC = $2 }
    FNR == 23 {
        refC = $2
        factorC = refC / measC
        print factorC
    }
    

    【讨论】:

      【解决方案2】:

      你的脚本说:

      FNR == 22 { measC = $2 }
      

      所以...当这个 awk 脚本只读取了五行输入文件时,measC 的值是多少?

      我会告诉你一个秘密。它将为零。因为尚未将任何其他内容分配给 measC。

      还有,你的台词:

      factorC = refC / measC
      

      在块之外,所以它被用来评估是否应该运行{ print factorC }。而且因为它是一个条件,它会为每一行运行。你不知道吗,在第 22 行之前,measC 是 0。

      我不了解数据或输出,所以我不知道 measC 应该是什么。

      你想用这个来达到什么目的?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多