Home | History | Annotate | Line # | Download | only in traceroute
      1  1.1       cgd #!/bin/awk -f
      2  1.5  christos #	$NetBSD: median.awk,v 1.5 1997/10/04 16:31:32 christos Exp $
      3  1.1       cgd /^ *[0-9]/	{
      4  1.1       cgd 	# print out the median time to each hop along a route.
      5  1.1       cgd 	tottime = 0; n = 0;
      6  1.1       cgd 	for (f = 5; f <= NF; ++f) {
      7  1.1       cgd 		if ($f == "ms") {
      8  1.1       cgd 			++n
      9  1.1       cgd 			time[n] = $(f - 1)
     10  1.1       cgd 		}
     11  1.1       cgd 	}
     12  1.1       cgd 	if (n > 0) {
     13  1.1       cgd 		# insertion sort the times to find the median
     14  1.1       cgd 		for (i = 2; i <= n; ++i) {
     15  1.1       cgd 			v = time[i]; j = i - 1;
     16  1.1       cgd 			while (time[j] > v) {
     17  1.1       cgd 				time[j+1] = time[j];
     18  1.1       cgd 				j = j - 1;
     19  1.1       cgd 				if (j < 0)
     20  1.1       cgd 					break;
     21  1.1       cgd 			}
     22  1.1       cgd 			time[j+1] = v;
     23  1.1       cgd 		}
     24  1.1       cgd 		if (n > 1 && (n % 2) == 0)
     25  1.1       cgd 			median = (time[n/2] + time[(n/2) + 1]) / 2
     26  1.1       cgd 		else
     27  1.1       cgd 			median = time[(n+1)/2]
     28  1.1       cgd 
     29  1.1       cgd 		print $1, median
     30  1.1       cgd 	}
     31  1.1       cgd }
     32