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