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