Como posso somar o tempo com base nos nomes de usuários?

2

Basicamente, quero ver quanto tempo cada usuário passou conectado.

(username) pts/0 (IP adress) Tue Dec 12 17:51 - 18:14 (00:22) - é assim que uma linha aparece no último comando. O nome de usuário é entre os caracteres 1 a 9, o tempo é entre 67 e 71. Existem vários logins de cada usuário, então quero somar o tempo com base no nome de usuário dele. Já contei quantas vezes um usuário logou usando

echo 'last | sort | cut -c1-9 | uniq -c | sort -n | head -$y'

em um script bash. É possível adicionar o tempo de cada usuário usando um formato semelhante a este? Eu estava pensando em um loop for, mas não tenho como configurá-lo. Alguma idéia?

    
por Bakos Dominik 20.11.2018 / 18:58

1 resposta

1

Você pode usar o comando ac para isso. Parte do pacote psacct .

$ last|head
steve    pts/0        cpc79909-stkp12- Tue Nov 20 18:40   still logged in
steve    pts/0        cpc79909-stkp12- Mon Nov 19 22:19 - 23:09  (00:50)
steve    pts/0        cpc79909-stkp12- Wed Nov 14 19:36 - 19:45  (00:09)
steve    pts/0        cpc79909-stkp12- Fri Nov  9 11:43 - 11:56  (00:12)
steve    pts/0        cpc79909-stkp12- Thu Nov  8 21:58 - 22:00  (00:02)
steve    pts/0        cpc79909-stkp12- Mon Nov  5 17:37 - 18:30  (00:53)
steve    pts/0        cpc79909-stkp12- Fri Nov  2 19:45 - 20:39  (00:54)
steve    pts/1        cpc79909-stkp12- Fri Nov  2 17:34 - 18:31  (00:57)
steve    pts/0        cpc79909-stkp12- Fri Nov  2 16:01 - 18:30  (02:29)
steve    pts/0        cpc79909-stkp12- Thu Nov  1 21:10 - 23:14  (02:04)
$ ac -p
        steve                               33.79
        total       33.79
$

Ou use awk ?

$ last | awk '$NF ~ /^\([0-9]+:[0-9]+\)$/{split($NF,t,":");a[$1]+=t[1]*60+t[2]}END{for(x in a){print x,a[x]}}'
    
por 20.11.2018 / 20:02