计算网络总登录时间

计算网络总登录时间

我有这个日志文件,它记录用户登录/注销网络的会话

[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 

我想计算所有用户总共花费的在线时间,上面的日志文件实际上很长,这只是一个例子。

在此示例中将为 5:06:06 小时

答案1

您可以尝试sed执行awk此任务:

    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将排列每个用户的“登录”和“注销”时间范围,然后awk对相关列进行时间计算。

答案2

如果您的系统提供,您还可以尝试将date, 与-f从“进程替换”读取的(文件输入)选项结合起来,以获取秒数和简单的awk求和:

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

相关内容