caclulate tempo de login total para rede

0

Eu tenho este arquivo de log que está gravando as sessões de log in / log out pelos usuários para a rede

[10:21:10] User logged in 
[13:59:42] User logged out 
[15:42:00] User logged in 
[16:42:13] User logged out 
[11:15:02] User logged in 
[11:42:23] User logged out 

Eu quero calcular o tempo total gasto on line para todos os usuários juntos, o arquivo de log acima é realmente muito longo e isso é apenas um exemplo.

neste exemplo, será 5:06:06 horas

    
por Cellman 07.10.2018 / 17:04

2 respostas

1

Você pode tentar sed e awk para esta tarefa:

    cat file | sed -r 'N; s/\n/ /; s/] User logged [^ ]+//g; y/[:/  /' | awk '{s += ($4-$1)*3600 + ($5-$2)*60 + $6-$3}END {printf "%d:%02d:%02d\n", s/3600, s/60%60, s%60}'

    5:06:06

sed alinha os períodos de "login" e "logout" por usuário, então awk fará o cálculo do tempo para as colunas relevantes.

    
por 07.10.2018 / 17:16
0

Se fornecido pelo seu sistema, você também pode tentar uma combinação de date , com a opção -f (entrada de arquivo) lendo uma "substituição de processo", para obter os segundos, e um simples awk somatório:

date -f <(cut -c2-9 file1) +%s | awk '{getline X; SUM += X - $0} END {printf "%02d:%02d:%02d\n", SUM/3600, SUM/60%60, SUM%60}'
05:06:06
    
por 10.10.2018 / 16:11

Tags