Конвертировать метку времени в секундах в bash

Насколько я знаю, переменные bash не имеют определенного типа.

Моя проблема в том, что мне нужно преобразовать метку времени (всегда в формате: hh:mm:ss) в одно целое число, представляющее секунды.

Итак, я разрезал части hh, mm и ss на отдельные строки и использую expr для вычисления целого числа секунд, например:

TIME=expr $HH \* 3600 + $MM \* 60 + $SS

Но когда, например, $HH=00 тогда expr не будет работать. Можно ли преобразовать строки типа 00 или 01 в целые числа?

5
задан 24 January 2014 в 19:58

2 ответа

Попробуйте awk. Например:

echo "00:20:40" | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }'

Итак, если у вас есть:

time="00:20:40"

, то:

seconds=$(echo $time | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }')

и echo $seconds напечатает 1240.

0
ответ дан 24 January 2014 в 19:58
  • 1
    @Joe, используйте bind '"\C-M":"\n"' # для сбрасывания этого. Запаздывающий хеш в команде делает дополнительный текст комментарием, таким образом запрещающим его эффект, как я записал в ответе. – Nykakin 16 July 2015 в 10:16

Если вы хотите преобразовать текущее время в секунду , попробуйте этот скрипт

#!/bin/bash

let var=$(date +%H)*3600+$(date +%M)*60+$(date +%S)
echo $var

. Он преобразует текущее время в секунды (целое число).

Если вы хотите преобразовать произвольную временную строку , например, HH:MM:SS, во вторую, то лучше использовать ответ Раду Радеану . Я мог бы дать что-то, как вы пытались,

Я предполагаю, что вы сохранили часы, минуты и секунды в HH, MM и SS, а затем использовать следующее для сохранения времени в секундах. в var,

let var=HH*3600+MM*60+SS
0
ответ дан 24 January 2014 в 19:58

Другие вопросы по тегам:

Похожие вопросы: