我的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
答案 0 :(得分:5)
因为您将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
}
答案 1 :(得分:2)
你的剧本说:
FNR == 22 { measC = $2 }
所以...当这个awk脚本只读了你输入文件的五行时,measC的值是多少?
我会告诉你一个秘密。它将为零。因为还没有任何东西给measC分配任何东西。
另外,你的行:
factorC = refC / measC
在块之外,因此它用于评估是否应该运行{ print factorC }
。因为它是一个条件,它会为每一行运行。你知道吗,在第22行之前,measC是0。
我不了解数据或输出,所以我不知道measC应该是什么,如果有的话。
你想用这个来实现什么?