Actualizar:
Aquí hay una nueva implementación que hace uso de dcla "base de salida". Tenga en cuenta que si la suma total es más de 60 horas, esto generará cuatro valores separados por espacios en lugar de tres. (Y si la suma total es inferior a una hora, solo se generarán dos valores separados por espacios).
awk '{print $2}' file.txt | tr : \ | dc -f - -e '60o0ddd[+r60*+r60d**+z1<a]dsaxp'
Se supone que la entrada está en triples de hora, minuto, segundo, como se muestra en la pregunta.
La salida en la entrada proporcionada es:
16 43
Respuesta original:
Hagamos esto con dcsu calculadora de escritorio. Es el back-end bcy es extremadamente flexible, aunque a menudo se considera críptico.
Primero, algo de preprocesamiento para dar solo los tiempos y convertir los dos puntos en espacios:
awk '{print $2}' | tr : ' '
También podríamos hacer esto con Sed:
sed -En -e 's/^.*([0-9][0-9]):([0-9][0-9]):([0-9][0-9]).*$/\1 \2 \3/p'
Iré con Awk y trporque es más simple. Cualquiera de los comandos anteriores produce una salida limpia en el siguiente formato. (Estoy usando mi propio texto de ejemplo porque lo considero más interesante; tiene horas incluidas. El suyo también funcionará).
$ cat input
9 39 42
8 04 50
7 49 32
10 01 54
7 19 18
Dados los tiempos en el formato anterior, ejecútelos en el siguiente script Sed y canalice el resultado dccomo se muestra a continuación:
sed -e '1s/^/0 /' -e 's/$/ r 60 * + r 60 60 * * + +/' -e '$s/$/ 60 60 * ~ 60 ~ f/' input | dc
(Desglosado para reducir el desplazamiento lateral :)
sed <input \
-e '1s/^/0 /' \
-e 's/$/ r 60 * + r 60 60 * * + +/' \
-e '$s/$/ 60 60 * ~ 60 ~ f/' |
dc
La salida será segundos, minutos, horas, en esa secuencia. (Tenga en cuenta que esta es una secuencia inversa.) Estoy aprendiendo, dcasí que esta no es una solución perfecta, pero creo que es bastante buena para un primer vistazo dc.
Ejemplo de entrada y salida, pegado directamente desde mi terminal:
$ cat input
9 39 42
8 04 50
7 49 32
10 01 54
7 19 18
$ sed -e '1s/^/0 /' -e 's/$/ r 60 * + r 60 60 * * + +/' -e '$s/$/ 60 60 * ~ 60 ~ f/' input | dc
16
55
42
$