使用AWK计算NS2中的平均数据包移动速度
我需要计算ns2中的平均数据包传输速度。我必须在awk程序中编写这个公式。但是我不知道怎么做。使用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
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
。