총 네트워크 로그인 시간 계산

총 네트워크 로그인 시간 계산

사용자가 네트워크에 로그인/로그아웃하는 세션을 기록하는 로그 파일이 있습니다.

[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

관련 정보