ユーザーがネットワークにログイン/ログアウトするセッションを記録するログファイルがあります。
[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
で時間計算が実行されます。