154359Sroberto# awk program to scan loopstats files and report errors/statistics 254359Sroberto# 354359Sroberto# usage: awk -f loop.awk loopstats 454359Sroberto# 554359Sroberto# format of loopstats record 654359Sroberto# MJD sec time (s) freq (ppm) poll 754359Sroberto# 49235 3.943 0.000016 22.4716 6 854359Sroberto# 954359Sroberto# format of output dataset (time values in milliseconds, freq in ppm) 1054359Sroberto# loopstats.19960706 1154359Sroberto# loop 1180, 0+/-11.0, rms 2.3, freq -24.45+/-0.045, var 0.019 1254359Sroberto# 1354359SrobertoBEGIN { 1454359Sroberto loop_tmax = loop_fmax = -1e9 1554359Sroberto loop_tmin = loop_fmin = 1e9 1654359Sroberto} 1754359Sroberto# 1854359Sroberto# scan all records in file 1954359Sroberto# 2054359Sroberto{ 2154359Sroberto if (NF >= 5) { 2254359Sroberto loop_count++ 2354359Sroberto if ($3 > loop_tmax) 2454359Sroberto loop_tmax = $3 2554359Sroberto if ($3 < loop_tmin) 2654359Sroberto loop_tmin = $3 2754359Sroberto if ($4 > loop_fmax) 2854359Sroberto loop_fmax = $4 2954359Sroberto if ($4 < loop_fmin) 3054359Sroberto loop_fmin = $4 3154359Sroberto loop_time += $3 3254359Sroberto loop_time_rms += $3 * $3 3354359Sroberto loop_freq += $4 3454359Sroberto loop_freq_rms += $4 * $4 3554359Sroberto } 3654359Sroberto} END { 3754359Sroberto if (loop_count > 0) { 3854359Sroberto loop_time /= loop_count 3954359Sroberto loop_time_rms = sqrt(loop_time_rms / loop_count - loop_time * loop_time) 4054359Sroberto loop_freq /= loop_count 4154359Sroberto loop_freq_rms = sqrt(loop_freq_rms / loop_count - loop_freq * loop_freq) 4254359Sroberto 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 4354359Sroberto } 4454359Sroberto} 4554359Sroberto 46