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