Awk 致命:尝试零除

Awk 致命:尝试零除,awk,Awk,当我试图用awk计算平均值和标准偏差时,我得到的是awk:fatal:除以零的错误 我的命令是 BEGIN{ recvs = 0; routing_packets = 0; } { state = $1; layer = $3; tipe_data = $6; } { if (state == "r" && tipe_data == "tcp" && layer=="AGT") recvs++; if (state == "

当我试图用awk计算平均值和标准偏差时,我得到的是awk:fatal:除以零的错误

我的命令是

BEGIN{
recvs = 0;
routing_packets = 0;
}
{
state       =   $1;
layer       =   $3;
tipe_data   =   $6;
}
{
if (state == "r" && tipe_data == "tcp" && layer=="AGT") recvs++;
if (state == "s"  && layer == "AGT" && tipe_data =="AODV") routing_packets++;   
}

END{
printf("##################################################################################\n");

printf("\n");

printf("                       Normalized Routing Load = %.3f\n", routing_packets/recvs);

printf("\n");

printf("##################################################################################\n");
} 

谢谢

是的,分配给RECV和routing_数据包变量的值为零

recvs = 0;
routing_packets = 0;
你想把它分开。就是

routing_packets/recvs
结果呢,

awk: fatal: division by zero attempted" error

如果此If检查从未成功,则RECV的值将等于0

if (state == "r" && tipe_data == "tcp" && layer=="AGT") recvs++;
尽管如此,您的程序仍将继续,并点击这一行来路由数据包/记录 您应该根据您的需求处理RECV等于0的场景。

更改此行

printf("                       Normalized Routing Load = %.3f\n", routing_packets/recvs);

一个tipe数据可能应该是tipe_数据。但我想,这与被零除无关……试着打印状态、图层和tipe_数据,确保它们包含您期望的内容。。。在分割之前还打印路由_数据包和RECV。
if (recvs)printf("                       Normalized Routing Load = %.3f\n", routing_packets/recvs);