所以,我试图通过日志计算用户在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脚本中?
答案 0 :(得分:0)
在我看来,最好的方法是获得如下输出:
(id:XY)
这是获取这些行的第一个命令行(假设sed 's/^\(.*:[0-9][0-9]\).* \(dis\)\?connected.*(id:\([^)]*\)).*$/\3 \1 \2connected/'
是uniq客户端ID):
connect
然后,对于每个CLIENTID
行,您必须使用date
找到断开连接。检索日期(琐碎)你可以得到他们的差异(已在SO上讨论,你可以使用{{1}})。