사용자 이름을 기준으로 시간을 합산하는 방법은 무엇입니까?

사용자 이름을 기준으로 시간을 합산하는 방법은 무엇입니까?

기본적으로 각 사용자가 로그인하는 데 걸리는 시간을 확인하고 싶습니다.

(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]}}'

관련 정보