无线Trace脚本(旧格式)-平均延时

BEGIN {
       #程序初始化,设定一变量以记录目前处理的封包的最大ID号码。在awk环境下变量的使用不需要声明,直接赋值。
       highest_uid = 0;
       total_packet=0;
       total_delay_time=0;
}
#下面大括号里面的内容会针对要进行处理的记录(也就是我们的trace文件)的每一行都重复执行一次
{
       event = $1;     #$1表示一行的第一栏,是事件的动作。每一栏默认是以空格分隔的。下同。
       time = $2;       #事件发生的时间
       node_nb = $3;        #发生事件的节点号(但是两边夹着“_”,下面一句代码将“_”处理掉)
       trace_type = $4;     #trace文件跟踪事件的层次(指在路由层或mac层等等)
       flag = $5;              #
       uid = $6;        #包的uid号码(普通包头的uid)
       pkt_type = $7;              #包的类型(是信令或是数据)
       pkt_size = $8;       #包的大小(byte)


        #下面的代码记录目前最高的CBR流的packet ID,本来的延迟分析是针对所有的包的(包括信令),这里作了简化,只针对CBR封包,以后大家做延时分析可以做相应的改动即可。
       if ( event=="s"&& pkt_type=="cbr" && uid > highest_uid )
       {#if判断句的前三个判断条件就不说了,第四个是说每个包的记录次数不超过1
              highest_uid = uid;
       }
       #记录封包的传送时间
       if ( event=="s"&& pkt_type=="cbr" && uid==highest_uid&&trace_type=="AGT" )
              start_time[uid] = time;    # start_time[]表明这是一个数组


    #记录封包的接收时间
       if ( event=="r"&& pkt_type=="cbr" && uid==highest_uid&&trace_type=="AGT" ) 
              end_time[uid] = time;
       if( event=="D")
        end_time[uid] =-1;


}
#END表明这是程序结束前执行的语句,也只执行一次
END {
       #当每行资料都读取完毕后,开始计算有效封包的端到端延迟时间。
       for ( packet_id = 0; packet_id <= highest_uid; packet_id++ )
       {
              start = start_time[packet_id];
              end = end_time[packet_id];
              #只把接收时间大于传送时间的记录打印出来
              if ( end!=-1&&start < end ){
      packet_duration = end - start;
      total_packet++;
      total_delay_time+=packet_duration;
     } 
       }     
       printf("%f\n",total_delay_time/total_packet);
}


 

转载于:https://www.cnblogs.com/yue-/archive/2012/05/22/6260071.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值