Aqui está uma versão do awk + awk:
last ... | awk '/reboot/{print $NF}' |
awk -F '[(+:)]' '
{
d += $(NF - 3); h += $(NF - 2); m += $(NF - 1)
}
END {
carry = m / 60; h += carry;
carry = h / 24; d += carry;
printf "%d days, %d hours, %d minutes\n", d, h % 24, m % 60
}'
A última coluna de last
está no formato (<days>+hours:minutes)
, em que days+
é descartado se o período for menor que 1 dia.
Aqui, o primeiro comando awk
gera a última coluna, a duração dos juros, para reboot
entradas.
Para o segundo comando awk
:
-
FS
é[(+:)]
, ou seja, parênteses ou+
ou:
. Assim,(h:m)
é dividido em,
h
,m
e(primeiro e último campos vazios) e
(d+h:m)
é dividido em,
d
,h
,m
e(novamente, primeiro e último campos vazios).
- Então, tomamos o segundo e último campo por minutos, o terceiro por último por horas e o quarto por dias. O quarto e último campo será o primeiro campo vazio se os dias não estiverem presentes. Então, vamos simplesmente adicionar
0
neste caso. - Então aumentamos as horas e os dias se minutos e horas estiverem acima de 60 e 24, respectivamente. Note que awk faz divisão de ponto flutuante, então
h
ed
agora podem ter partes fracionárias. - Em seguida, imprimimos os números como inteiros (
%d
), portanto, qualquer parte fracionária é ignorada.