通过日志为Teamspeak 3提供简单的Bash在线计时脚本?

时间:2015-10-15 13:15:34

标签: bash shell variables teamspeak

所以,我试图通过日志计算用户在Teamspeak 3服务器上联机的时间。 日志格式类似于

2015-10-14 23:30:29.676932|INFO |VirtualServerBase| 1| client connected 'clientX'(id:XY) from IPx.IPx.IPx.IPx:PortX 2015-10-15 00:12:45.870381|INFO |VirtualServerBase| 1| client disconnected 'clientX'(id:XY) reason 'reasonmsg=leave'

我当然可以使用grep "client connected \|client disconnected"过滤掉其他条目,并添加| grep "(id:XY)"以仅查看用户XY。 如果我使用| cut -c 1-16仅查看时间和日期并过滤掉所有不必要的内容。

结果命令为cat *.log | grep "client connected\|client disconnected" | cut -c 1-16。 之后,输出如下:

2015-10-02 14:12 2015-10-02 14:17 2015-10-06 14:18 2015-10-06 15:27

问题是:我如何计算连接和断开连接之间的时间并将它们添加到shell脚本中?

1 个答案:

答案 0 :(得分:0)

在我看来,最好的方法是获得如下输出:

(id:XY)

这是获取这些行的第一个命令行(假设sed 's/^\(.*:[0-9][0-9]\).* \(dis\)\?connected.*(id:\([^)]*\)).*$/\3 \1 \2connected/' 是uniq客户端ID):

connect

然后,对于每个CLIENTID行,您必须使用date找到断开连接。检索日期(琐碎)你可以得到他们的差异(已在SO上讨论,你可以使用{{1}})。