aboutsummaryrefslogtreecommitdiff
path: root/bin/sec.awk
diff options
context:
space:
mode:
Diffstat (limited to 'bin/sec.awk')
-rw-r--r--bin/sec.awk42
1 files changed, 42 insertions, 0 deletions
diff --git a/bin/sec.awk b/bin/sec.awk
new file mode 100644
index 00000000..aab8fcf4
--- /dev/null
+++ b/bin/sec.awk
@@ -0,0 +1,42 @@
+# Convert [[[hh:]mm:]ss] timestamps to seconds
+
+# Separator is :
+BEGIN {
+ FS = ":"
+}
+
+# If no fields or illegal characters, warn, skip line, accrue errors
+!NF || /[^0-9:]/ {
+ print "sec: Bad format" > "/dev/stderr"
+ err = 1
+ next
+}
+
+# Strip leading zeroes to stop awk trying to be octal
+{
+ for (i = 1; i <= NF; i++)
+ sub(/^0*/, "", $i)
+}
+
+# Match hh:mm:ss
+NF == 3 {
+ printf "%u\n", $1 * 3600 + $2 * 60 + $3
+ next
+}
+
+# Match mm:ss
+NF == 2 {
+ printf "%u\n", $1 * 60 + $2
+ next
+}
+
+# Match ss (in which case all we've done is strip zeroes)
+NF == 1 {
+ printf "%u\n", $1
+ next
+}
+
+# Done, exit 1 if we had any errors on the way
+END {
+ exit(err > 0)
+}