aboutsummaryrefslogtreecommitdiff
path: root/bin/hms.awk
diff options
context:
space:
mode:
Diffstat (limited to 'bin/hms.awk')
-rw-r--r--bin/hms.awk40
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)
+}