0

因此,我试图通过日志计算用户在 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 脚本中?

4

1 回答 1

0

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

CLIENTID1 YYYY-MM-DD connect
CLIENTID2 YYYY-MM-DD connect
CLIENTID3 YYYY-MM-DD connect
CLIENTID1 YYYY-MM-DD disconnect

这是获取这些行的第一个命令行(假设这(id:XY)是一个 uniq 客户端 ID):

sed 's/^\(.*:[0-9][0-9]\).* \(dis\)\?connected.*(id:\([^)]*\)).*$/\3 \1 \2connected/'

然后,对于每一connect行,您必须使用CLIENTID. 检索日期(微不足道),您可以获得他们的差异(已经在 SO 上讨论过,您可以使用date)。

于 2015-10-15T13:56:35.920 回答