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

問題は、接続と切断の間の時間をカウントし、それらをシェル スクリプト内で合計するにはどうすればよいかということです。

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)一意のクライアント ID であると仮定します)。

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

次に、回線ごとconnectに、 を使用して切断された回線を見つける必要がありますCLIENTID。日付を取得すると(些細なことですが)、それらの差分を取得できます(SOですでに説明されています。使用できますdate)。

于 2015-10-15T13:56:35.920 に答える