xref: /freebsd-src/contrib/ntp/scripts/stats/loop.awk (revision cfe30d02adda7c3b5c76156ac52d50d8cab325d9)
1*c0b746e5SOllivier Robert# awk program to scan loopstats files and report errors/statistics
2*c0b746e5SOllivier Robert#
3*c0b746e5SOllivier Robert# usage: awk -f loop.awk loopstats
4*c0b746e5SOllivier Robert#
5*c0b746e5SOllivier Robert# format of loopstats record
6*c0b746e5SOllivier Robert#  MJD    sec   time (s)  freq (ppm)  poll
7*c0b746e5SOllivier Robert# 49235  3.943  0.000016   22.4716    6
8*c0b746e5SOllivier Robert#
9*c0b746e5SOllivier Robert# format of output dataset (time values in milliseconds, freq in ppm)
10*c0b746e5SOllivier Robert# loopstats.19960706
11*c0b746e5SOllivier Robert# loop 1180, 0+/-11.0, rms 2.3, freq -24.45+/-0.045, var 0.019
12*c0b746e5SOllivier Robert#
13*c0b746e5SOllivier RobertBEGIN {
14*c0b746e5SOllivier Robert	loop_tmax = loop_fmax = -1e9
15*c0b746e5SOllivier Robert	loop_tmin = loop_fmin = 1e9
16*c0b746e5SOllivier Robert}
17*c0b746e5SOllivier Robert#
18*c0b746e5SOllivier Robert# scan all records in file
19*c0b746e5SOllivier Robert#
20*c0b746e5SOllivier Robert{
21*c0b746e5SOllivier Robert	if (NF >= 5) {
22*c0b746e5SOllivier Robert		loop_count++
23*c0b746e5SOllivier Robert		if ($3 > loop_tmax)
24*c0b746e5SOllivier Robert			loop_tmax = $3
25*c0b746e5SOllivier Robert		if ($3 < loop_tmin)
26*c0b746e5SOllivier Robert			loop_tmin = $3
27*c0b746e5SOllivier Robert		if ($4 > loop_fmax)
28*c0b746e5SOllivier Robert			loop_fmax = $4
29*c0b746e5SOllivier Robert		if ($4 < loop_fmin)
30*c0b746e5SOllivier Robert			loop_fmin = $4
31*c0b746e5SOllivier Robert		loop_time += $3
32*c0b746e5SOllivier Robert		loop_time_rms += $3 * $3
33*c0b746e5SOllivier Robert		loop_freq += $4
34*c0b746e5SOllivier Robert		loop_freq_rms += $4 * $4
35*c0b746e5SOllivier Robert	}
36*c0b746e5SOllivier Robert} END {
37*c0b746e5SOllivier Robert	if (loop_count > 0) {
38*c0b746e5SOllivier Robert		loop_time /= loop_count
39*c0b746e5SOllivier Robert                loop_time_rms = sqrt(loop_time_rms / loop_count - loop_time * loop_time)
40*c0b746e5SOllivier Robert		loop_freq /= loop_count
41*c0b746e5SOllivier Robert		loop_freq_rms = sqrt(loop_freq_rms / loop_count - loop_freq * loop_freq)
42*c0b746e5SOllivier Robert		printf "loop %d, %.0f+/-%.1f, rms %.1f, freq %.2f+/-%0.3f, var %.3f\n", loop_count, (loop_tmax + loop_tmin) / 2 * 1e6, (loop_tmax - loop_tmin) / 2 * 1e6, loop_time_rms * 1e6, (loop_fmax + loop_fmin) / 2, (loop_fmax - loop_fmin) / 2, loop_freq_rms
43*c0b746e5SOllivier Robert	}
44*c0b746e5SOllivier Robert}
45*c0b746e5SOllivier Robert
46