--- /dev/null
+#!/bin/sh
+
+set -e
+
+# Report gaps that contain the target time
+
+target=${1:-3:30}
+threshold=${2:-3600}
+LOGFILE="${3:-$HOME/keystroke-timestamps.log}"
+
+awk -vtarget="$(date -d "$target" '+%H %M %S')" -vthreshold="$threshold" -vtime_fmt="%F %T" '
+ function first_target_after(t) {
+ # TODO: Be smarter for targets near DST changes. :(
+ target_on_t_day = mktime(strftime("%Y %m %d ", t) target)
+ target_on_prev_day = mktime(strftime("%Y %m %d ", target_on_t_day - 86400) target)
+ target_on_next_day = mktime(strftime("%Y %m %d ", target_on_t_day + 86400) target)
+ if (target_on_prev_day > t) { return target_on_prev_day }
+ if (target_on_t_day > t) { return target_on_t_day }
+ return target_on_next_day
+ }
+ $1 <= 67767976233561595 {
+ if (prev && $1 - prev > threshold && $1 > first_target_after(prev)) {
+ print(strftime(time_fmt, prev), "to", strftime(time_fmt, $1), "was", $1 - prev)
+ }
+ prev = $1
+ }' "$LOGFILE"