기본적으로 각 사용자가 로그인하는 데 걸리는 시간을 확인하고 싶습니다.
(username) pts/0 (IP adress) Tue Dec 12 17:51 - 18:14 (00:22) -
마지막 명령의 한 줄은 다음과 같습니다. 사용자 이름은 1~9자이고 시간은 67~71자입니다. 각 사용자는 여러 번의 로그인을 갖고 있으므로 사용자 이름을 기준으로 총 시간을 계산하고 싶습니다. 사용자가 다음을 사용하여 로그인한 횟수를 계산했습니다.
echo `last | sort | cut -c1-9 | uniq -c | sort -n | head -$y`
bash 스크립트에서. 이와 유사한 형식을 사용하여 각 사용자의 시간을 누적할 수 있습니까? for 루프를 생각하고 있지만 설정 방법을 모르겠습니다. 어떤 아이디어가 있나요?
답변1
이 ac
명령을 사용하여 이를 달성할 수 있습니다. 패키지의 일부 psacct
.
$ last|head
steve pts/0 cpc79909-stkp12- Tue Nov 20 18:40 still logged in
steve pts/0 cpc79909-stkp12- Mon Nov 19 22:19 - 23:09 (00:50)
steve pts/0 cpc79909-stkp12- Wed Nov 14 19:36 - 19:45 (00:09)
steve pts/0 cpc79909-stkp12- Fri Nov 9 11:43 - 11:56 (00:12)
steve pts/0 cpc79909-stkp12- Thu Nov 8 21:58 - 22:00 (00:02)
steve pts/0 cpc79909-stkp12- Mon Nov 5 17:37 - 18:30 (00:53)
steve pts/0 cpc79909-stkp12- Fri Nov 2 19:45 - 20:39 (00:54)
steve pts/1 cpc79909-stkp12- Fri Nov 2 17:34 - 18:31 (00:57)
steve pts/0 cpc79909-stkp12- Fri Nov 2 16:01 - 18:30 (02:29)
steve pts/0 cpc79909-stkp12- Thu Nov 1 21:10 - 23:14 (02:04)
$ ac -p
steve 33.79
total 33.79
$
아니면 을 사용합니까 awk
?
$ last | awk '$NF ~ /^\([0-9]+:[0-9]+\)$/{split($NF,t,":");a[$1]+=t[1]*60+t[2]}END{for(x in a){print x,a[x]}}'