사용자가 네트워크에 로그인/로그아웃하는 세션을 기록하는 로그 파일이 있습니다.
[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