2015-10-15 2 views
0

Итак, я пытаюсь подсчитать время, когда пользователь был в сети на сервере Teamspeak 3 через журнал. Формат журнала - это что-то вродеSimple Bash Сценарий подсчета времени в Интернете для Teampeak 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

Возникает вопрос: как я могу считать время между подключит и отключит и добавить их в раковине-скрипт?

+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) является уник идентификатор клиента):

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

Затем для каждой линии connect вы должны найти разъединение, используя CLIENTID. Получив даты (тривиальный), вы можете получить их diff (уже обсужденный на SO, вы можете использовать date).