Estoy interesado en saber el tiempo total que paso trabajando en mi computadora portátil en 2016.
last reboot --since 2016-01-01 --until 2016-12-31 | grep -o '(.*)' | grep -v '-'
me da el tiempo de actividad total de la computadora portátil en este formato:
(01:33)
(04:40)
(01:31)
(1+06:41)
(02:47)
(00:30)
Ahora, ¿cómo lo sumo?
command-line
bash
text-processing
time
daltonfury42
fuente
fuente
wtmp
registros (que es lo que ve en la salida dellast
comando) están configurados para rotar mensualmente (en/etc/logrotate.conf
), lo que significa que después de cierto período de tiempo, el registro más antiguo se elimina. En otras palabras, sea lo que sea que intente hacerlast
, no será exactoRespuestas:
Aquí hay una versión awk + awk:
last
La última columna está en el formato(<days>+hours:minutes)
, dondedays+
se descarta si el período es inferior a 1 día.Aquí, el primer
awk
comando genera la última columna, la duración del interés, para lasreboot
entradas.Para el segundo
awk
comando:FS
es[(+:)]
, es decir, paréntesis o+
o:
. Por lo tanto,(h:m)
se divide a,
h
,m
y(primero y último campos vacíos), y
(d+h:m)
se divide a,
d
,h
,m
y(de nuevo, primero y último campos vacíos).
0
en este caso.h
yd
ahora puede tener partes fraccionarias.%d
), por lo que se ignora cualquier parte fraccionaria.fuente
Intentando con bash script y extendiendo tu comando. Yo uso
dateutils
para sumar la duración del tiempo.Por lo tanto, para usar este script, se necesita el
dateutils
paquete disponible a través deapt
. (sudo apt install dateutils
)Este script también tiene en cuenta el tiempo de actividad actual (sesión actual), por lo tanto, es más preciso. Los segundos no se cuentan. La unidad más baja reportada es minuto.
temp
.2015-01-01
a la cual se agrega el tiempo de actividad actual.new
org
y el tiempo de actividad netonew
se encuentra por diferencia.Salida:
El siguiente script es para el tiempo de actividad en exactamente un año a partir del día en que se ejecuta el script .
fuente
Aquí hay una implementación de Python de lo que quiero, pero estoy seguro de que hay una manera elegante de hacerlo con bash:
fuente