首页 > 解决方案 > 打印一个月内同一时间段内平均登录系统的用户数的脚本

问题描述

我需要编写一个脚本,打印一个月内同一时间段内登录系统的平均用户数。我需要使用“last”和“awk”。

为了更清楚,我们以 3 月和 10:00-11:00 为例。假设在 3 月 1 日,我们有 2 个用户在那个时期登录,在 3 月 2 日,我们有 4 个用户在那个时期登录,依此类推。对于这 2 天,我们有一个平均数字。

这是我到目前为止所得到的,但我只设法显示在给定日期登录的用户。

if [ $# = 0 ]
then
 echo "Give more parameters"
else
 echo "Date:"
 d=`read`
 for i
 do
  echo "user: $i"
  last $i | grep $d
 done
fi

我期待看到这样的结果:

3 月 10:00 到 11:00 之间的平均用户数为 x。(正如预期的输出示例)

标签: bash

解决方案


这种东西:

last | awk '{
if(NF>7){
if($(NF-5)=="Mar"){ # You may change the month or even accept it as a parameter
if($(NF-4) != date){datecount++};
match($(NF-3),/^([0-9]+)/,arr);
if(arr[1]>=8 && arr[1]<=16){
# Note I am using different time interval, change it accordingly
count++;
}
}
date=$(NF-4);
}
}
END{
print "Total logins   : ",count;
print "Total dates    : ",datecount;
print "Average logins : ",count/datecount;
}'

样本输出

count     :  20
datecount :  12
average   :  1.66667

推荐阅读