То, чего вы хотите достичь, можно сделать непосредственно в awk
, используя следующую строку:
$ systemctl status cassandra | awk '/(Active: active)/{s=$6" "$7;gsub(/-|:/," ",s); print systime() - mktime(s)}'
Это даст вам время работы непосредственно на основе времени запуска, а не на приблизительном времени работы, напечатанном systemctl
.
Если этот подход не работает, тогда я предлагаю использовать команду date
, чтобы выполнить весь анализ. Если вы можете изменить h
на hour
в своих примерах, то вы можете сделать следующее:
$ date -d "1970-01-01 + 3day 18hour 15min 16sec" +%s
324916
Если вы не можете, тогда я предлагаю следующее. Если длительность хранится в переменной $duration
, тогда вы делаете
$ date -d "1970-01-01 + ${duration/h/hour}" +%s
Наличие пробелов между числами и строками day
, h
, min
или sec
не имеет значения.
Идея этого в том, что вы просите date
вычислить все для вас, поскольку %s
возвращает время unix с 1970-01-01 в секундах.
man date
%s
секунды с 1970-01-01 00:00:00 UTC