総ネットワークログイン時間の計算

総ネットワークログイン時間の計算

ユーザーがネットワークにログイン/ログアウトするセッションを記録するログファイルがあります。

[10:21:10] User logged in 
[13:59:42] User logged out 
[15:42:00] User logged in 
[16:42:13] User logged out 
[11:15:02] User logged in 
[11:42:23] User logged out 

すべてのユーザーがオンラインで費やした合計時間を計算したいと思います。上記のログファイルは実際には非常に長いです。これは単なる例です。

この例では5:06:06時間です。

答え1

sed次の操作を試すことができますawk

    cat file | sed -r 'N; s/\n/ /; s/] User logged [^ ]+//g; y/[:/  /' | awk '{s += ($4-$1)*3600 + ($5-$2)*60 + $6-$3}END {printf "%d:%02d:%02d\n", s/3600, s/60%60, s%60}'

    5:06:06

sed各ユーザーの「ログイン」と「ログアウト」の時間範囲が並べ替えられ、その列awkで時間計算が実行されます。

答え2

システムが提供している場合は、プロセス置換で読み取った(ファイル入力)オプションとdate組み合わせて、-f秒と単純なawk合計を得ることもできます。

date -f <(cut -c2-9 file1) +%s | awk '{getline X; SUM += X - $0} END {printf "%02d:%02d:%02d\n", SUM/3600, SUM/60%60, SUM%60}'
05:06:06

関連情報