使用AWK计算NS2中的平均数据包移动速度

使用AWK计算NS2中的平均数据包移动速度,awk,ns2,Awk,Ns2,我需要计算ns2中的平均数据包传输速度。我必须在awk程序中编写这个公式。但是我不知道怎么做。 n是接收到的数据包数,s是数据包传输时的距离。任何答案都会很有帮助。谢谢。函数topla(数组){sum=0;for(数组中的i){sum=sum+250/数组[i];}返回sum;} function topla( array ) {sum=0; for (i in array) {sum=sum+250/array[i];}return sum;} BEGIN { total_packets_s

我需要计算ns2中的平均数据包传输速度。我必须在awk程序中编写这个公式。但是我不知道怎么做。
n
是接收到的数据包数,
s
是数据包传输时的距离。任何答案都会很有帮助。谢谢。

函数topla(数组){sum=0;for(数组中的i){sum=sum+250/数组[i];}返回sum;}
function topla( array ) {sum=0; for (i in array) {sum=sum+250/array[i];}return sum;}

BEGIN {
total_packets_sent = 0;
total_packets_received = 0;
total_packets_dropped = 0;
first_packet_sent = 0;
last_packet_sent = 0;
last_packet_received = 0;}


{event = $1; time = $2; node = $3; type = $4; reason = $5; packetid = $6;



if ( time < simulation_start || simulation_start == 0 )
    simulation_start = time;
if ( time > simulation_end )
    simulation_end = time;



if ( type == "AGT" ) {
    nodes[node] = node; # to count number of nodes
    if ( time < node_start_time[node] || node_start_time[node] == 0 )
        node_start_time[node] = time;

    if ( time > node_end_time[node] )
        node_end_time[node] = time;

    if ( event == "s" ) {
        flows[node] = node; # to count number of flows
        if ( time < first_packet_sent || first_packet_sent == 0 )
            first_packet_sent = time;
        if ( time > last_packet_sent )
            last_packet_sent = time;
        # rate
        packets_sent[node]++;
        total_packets_sent++;

        # delay
        pkt_start_time[packetid] = time;
    }
    else if ( event == "r" ) {
        if ( time > last_packet_received )
            last_packet_received = time;
        # throughput
        packets_received[node]++;
        total_packets_received++;

        # delay
        pkt_end_time[packetid] = time;
    }
}}`

END {



# delay
for ( pkt in pkt_end_time) {
    end = pkt_end_time[pkt];
    start = pkt_start_time[pkt];
    delta = end - start;
    if ( delta > 0 ) {
        delay[pkt] = delta;

    }
}

result=topla(delay)/total_packets_received;

printf(result)
开始{ 发送的数据包总数=0; 接收的数据包总数=0; 丢弃的数据包总数=0; 第一个\u数据包\u发送=0; 最后发送的数据包=0; 最后接收的\u数据包\u=0;} {event=$1;time=$2;node=$3;type=$4;reason=$5;packetid=$6; 如果(时间<模拟|模拟|开始==0) 模拟开始=时间; 如果(时间>模拟结束) 模拟结束=时间; 如果(类型==“AGT”){ 节点[节点]=节点;#计算节点数 如果(时间节点\结束\时间[节点]) 节点结束时间[节点]=时间; 如果(事件==“s”){ flows[node]=node;#计算流的数量 如果(时间<第一次发送的数据包| |第一次发送的数据包==0) 第一个数据包发送=时间; 如果(时间>上次发送的数据包) 最后发送的数据包=时间; #比率 发送的数据包[节点]+; 发送的数据包总数++; #耽搁 pkt_开始时间[packetid]=时间; } 否则如果(事件==“r”){ 如果(时间>最后接收的数据包) 最后接收的数据包=时间; #吞吐量 接收到的数据包[节点]+; 接收的数据包总数++; #耽搁 pkt_end_time[packetid]=时间; } }}` 结束{ #耽搁 用于(pkt中的pkt\U结束时间){ end=pkt_end_时间[pkt]; start=pkt\u开始时间[pkt]; delta=结束-开始; 如果(增量>0){ 延迟[pkt]=增量; } } 结果=topla(延迟)/接收的数据包总数; printf(结果)
}


我写了这个awk程序。但它给出了除以零的尝试错误。我在topla函数中将传输范围写为250,但没有得到我想要的结果。我应该如何写传输范围?

欢迎使用StackOverflow。“输入图像描述”,即描述链接数学公式的作用。然后编写伪代码概述算法。然后运用你对awk的知识,写下你自己的尝试。然后在这里添加您的awk代码以询问特定问题。如果您完全不熟悉awk,学习awk教程可能会有所帮助。你可能想先拿这个。对你自己和试图帮助你的人来说,做一件非常有帮助的事情。向我们展示你的尝试,然后我们可以开始给予支持。你的公式是错误的!求和指数(
i
)从
n
n
t
s
都不依赖于
i