diff options
Diffstat (limited to 'bin/hms.awk')
-rw-r--r-- | bin/hms.awk | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/bin/hms.awk b/bin/hms.awk new file mode 100644 index 00000000..2aa492a1 --- /dev/null +++ b/bin/hms.awk @@ -0,0 +1,40 @@ +# Convert seconds to colon-delimited durations +BEGIN { + OFS = ":" + ex = 0 + stderr = "" +} + +# Refuse to deal with anything that's not a positive (unsigned) integer +/[^0-9]/ { + if (!stderr) + stderr = "cat >&2" + print "hms: Bad number" | stderr + ex = 1 + next +} + +# Integer looks valid +{ + # Break it down into hours, minutes, and seconds + s = int($0 + 0) + h = int(s / 3600) + s %= 3600 + m = int(s / 60) + s %= 60 + + # Print it, with the biggest number without a leading zero + if (h) + printf "%u:%02u:%02u\n", h, m, s + else if (m) + printf "%u:%02u\n", m, s + else + printf "%u\n", s +} + +# Done, exit 1 if we had any errors on the way +END { + if (stderr) + close(stderr) + exit(ex) +} |