Hey i found the awk script from mailing list,wondering if this would 
function,but it doesn't 
can anyone tell me why ?
from mailing list :
Plz see the following awk scripts that calcualate the following
 Performance Metrics Used
 Routing Overhead
 Normalize Routing Load
 Packet Delivery Fraction
 Average End to End delay
 Jitter
 Drop Packets
 Drop Bytes
 Throughput

These scripts work with new trace format and DSR protocol. Make changes for 
other protocols.

As an example, if you want to calculate throughput,

awk -f throughput.awk output.tr

  
 # ==============================throughput.awk ========================
  BEGIN {
 recvdSize = 0
 startTime = 1e6
 stopTime = 0
}
  {
 # Trace line format: normal
 if ($2 != "-t") {
  event = $1
  time = $2
  if (event == "+" || event == "-") node_id = $3
  if (event == "r" || event == "d") node_id = $4
  flow_id = $8
  pkt_id = $12
  pkt_size = $6
  flow_t = $5
  level = "AGT"
 }
 # Trace line format: new
 if ($2 == "-t") {
  event = $1
  time = $3
  node_id = $5
  flow_id = $39
  pkt_id = $41
  pkt_size = $37
  flow_t = $45
  level = $19
 }
   # Store start time
 if (level == "AGT" && (event == "+" || event == "s") && pkt_size >= 512) {
  if (time < startTime) {
   startTime = time
  }
 }
   # Update total received packets' size and store packets arrival time
 if (level == "AGT" && event == "r" && pkt_size >= 512) {
  if (time > stopTime) {
   stopTime = time
  }
  # Rip off the header
  hdr_size = pkt_size % 512
  pkt_size -= hdr_size
  # Store received packet's size
  recvdSize += pkt_size
 }
  }
  END {
 printf("Average Throughput[kbps] = %.2f\t\t 
StartTime=%.2f\tStopTime=%.2f\n",(recvdSize/(stopTime-startTime))*(8/1000),startTime,stopTime)
}
  
  
  
#  ============================= parameters.awk ========================
  BEGIN {
 sends=0;
 recvs=0;
 routing_packets=0.0;
 droppedBytes=0;
 droppedPackets=0;
 highest_packet_id =0;
 sum=0;
 recvnum=0;
   }
  {
 time = $3;
 packet_id = $41;
   #============= CALCULATE PACKET DELIVERY  FRACTION=================
 if (( $1 == "s") &&  ( $35 == "cbr" ) && ( $19=="AGT" ))   {  sends++; }
 if (( $1 == "r") &&  ( $35 == "cbr" ) && ( $19=="AGT" ))   {  recvs++; }
   #============= CALCULATE DELAY     ================================
 if ( start_time[packet_id] == 0 )  start_time[packet_id] = time;
 if (( $1 == "r") &&  ( $35 == "cbr" ) && ( $19=="AGT" )) {  
end_time[packet_id] = time;  }
 else {  end_time[packet_id] = -1;  }
   #============= TOTAL DSR OVERHEAD  ================================
 if (($1 == "s" || $1 == "f") && $19 == "RTR" && $35 =="DSR") routing_packets++;
   #============= DROPPED DSR PACKETS ================================
 if (( $1 == "d" ) && ( $35 == "cbr" )  && ( $3 > 0 ))
 {
  droppedBytes=droppedBytes+$37;
  droppedPackets=droppedPackets+1;
 }
    #find the number of packets in the simulation
        if (packet_id > highest_packet_id)
  highest_packet_id = packet_id;
}
  END {
  for ( i in end_time )
 {
 start = start_time[i];
 end = end_time[i];
 packet_duration = end - start;
 if ( packet_duration > 0 )  { sum += packet_duration; recvnum++; }
 }
     delay=sum/recvnum;
   NRL = routing_packets/recvs;     #normalized routing load = routing load but 
it differ from routing overhead
   PDF = (recvs/sends)*100;         #packet delivery ratio[fraction]
   printf("send = %.2f\n",sends);
   printf("recv = %.2f\n",recvs);
   printf("routingpkts = %.2f\n",routing_packets++);
   printf("PDF = %.2f\n",PDF);
   printf("NRL = %.2f\n",NRL);
   printf("Average e-e delay(ms)= %.2f\n",delay*1000);
   printf("No. of dropped data (packets) = %d\n",droppedPackets);
   printf("No. of dropped data (bytes)   = %d\n",droppedBytes);
   printf("Packet Loss [%]= %.2f  \n", 
(droppedPackets/(highest_packet_id+1))*100);
}

 

#  ============================== jitter.awk ============================
  BEGIN {
       num_recv=0
 }
  {
 # Trace line format: normal
 if ($2 != "-t") {
  event = $1
  time = $2
  if (event == "+" || event == "-") node_id = $3
  if (event == "r" || event == "d") node_id = $4
  flow_id = $8
  pkt_id = $12
  pkt_size = $6
  flow_t = $5
  level = "AGT"
 }
 # Trace line format: new
 if ($2 == "-t") {
  event = $1
  time = $3
  node_id = $5
  flow_id = $39
  pkt_id = $41
  pkt_size = $37
  flow_t = $45
  level = $19
 }
   # Store packets send time
 if (level == "AGT" && sendTime[pkt_id] == 0 && (event == "+" || event == "s") 
&& pkt_size >= 512) {
  sendTime[pkt_id] = time
 }
   # Store packets arrival time
 if (level == "AGT" && event == "r" && pkt_size >= 512) {
  recvTime[pkt_id] = time
  num_recv++
 }
}
  END {
 # Compute average jitter
 jitter1 = jitter2 = tmp_recv = 0
 prev_time = delay = prev_delay = processed = 0
 prev_delay = -1
 for (i=0; processed
  if(recvTime[i] != 0) {
          tmp_recv++
   if(prev_time != 0) {
    delay = recvTime[i] - prev_time
    e2eDelay = recvTime[i] - sendTime[i]
    if(delay < 0) delay = 0
    if(prev_delay != -1) {
     jitter1 += abs(e2eDelay - prev_e2eDelay)
     jitter2 += abs(delay-prev_delay)
    }
    prev_delay = delay
    prev_e2eDelay = e2eDelay
   }
   prev_time = recvTime[i]
  }
  processed++
 }
}
  END {
   
       printf("Jitter1 = %.2f\n",jitter1*1000/tmp_recv);
       printf("Jitter2 = %.2f\n",jitter2*1000/tmp_recv);
}
  function abs(value) {
 if (value < 0) value = 0-value
 return value
}


# =========================== end ========================

Reply via email to