2017-06-01 2 views
-2

enter image description herecalculer la vitesse de Voyage moyenne des paquets à l'aide NS2 AWK

je dois calculer la vitesse de Voyage de paquets en moyenne NS2. Je dois écrire cette formule dans le programme awk. Mais je n'ai aucune idée de comment le faire. n est le nombre de paquets reçus, et s est la distance à laquelle le paquet est transmis. Toute réponse sera très utile. Merci.

+2

Bienvenue dans StackOverflow. "Entrez une description d'image", c'est-à-dire décrivez ce que fait la formule mathématique liée. Ensuite, écrivez un pseudo-code pour décrire l'algorithme. Ensuite, appliquez votre connaissance de awk pour écrire votre propre tentative de le faire. Ensuite, ajoutez votre code awk ici pour poser une question spécifique. Travailler à travers un tutoriel awk pourrait vous aider, au cas où vous êtes complètement nouveau à awk. Vous pourriez vouloir commencer par prendre le [tour]. Faire un [mcve] est une chose très utile, pour vous et pour les gens qui essaient de vous aider. – Yunnosch

+0

Montrez-nous ce que vous avez essayé, alors nous pouvons commencer à donner le support. – CWLiu

+0

votre formule est erronée! l'indice de sommation ('i') va de' n' à 'n'. ni 't' ni' s' ne dépendent de 'i'. – karakfa

Répondre

0
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) 

}

je vous écris ce programme awk. Mais il donne la division par zéro tentative d'erreur.Et j'ai écrit la plage de transmission dans la fonction topla comme 250, mais je n'ai pas obtenu les résultats que je voulais.Comment devrais-je écrire la gamme de transmission?