#!/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"