2015-10-15 12 views
0

因此,我想通過日誌來計算用戶在Teamspeak 3服務器上聯機的時間。 日誌格式類似於簡單的Bash在線時間計數腳本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

比您想象的更復雜,您必須處理不同用戶如果您想獲得連接時間... – Amessihel

回答

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)。