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,me(primeiro e último campos vazios) e(d+h:m)é dividido em,d,h,me(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
0neste 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
hedagora podem ter partes fracionárias. - Em seguida, imprimimos os números como inteiros (
%d), portanto, qualquer parte fracionária é ignorada.