我必须计算一周中的每一天都有多少用户登录。我可以使用服务器上的最后一条命令获取数据,但是如何使用awk处理数据?这是一长串数据,日期名称在第4列中。我声明了这样的数组:t ["Sun"] = 0; t ["Sat"] = 0;等等,我可以从终端的简单输入中进行计数,但是如何在last的输出中使用它呢?

如果我登录服务器并键入:最后,我将得到如下结果,每一行包含用户名,pts/something,IP地址,星期几,时间等:

user pts/0 address Mon etc.

user pts/1 address Wed etc.

我想要这样的输出:

Mon: 10 users were logged in

Tue: 20 user were logged in etc

我的代码在这里,与终端的输入一起工作:

awk '
        BEGIN { t["Sun"]=0; t["Sat"]=0; t["Fri"]=0; t["Thu"]=0; t["Wed"]=0; t["Tue"]=0; t["Mon"]=0; }
        { t[substr($4,i,3)]++;} 
        END {for(i in t) print i ": " t[i]}   
'$*

到目前为止,对于这样的终端输入:

aa ss dd Fri
a d g Mon
q w e Fri

给出结果:

Wed: 0
Tue: 0
Fri: 2
Thu: 0
Sat: 0
Sun: 0
Mon: 1

如何使用awk命令处理last的输出?

分析解答

听起来您可能想要以下内容:

last |
awk '
    BEGIN { split("Sun Mon Tue Wed Thu Fri Sat",days) }
    { numUsers[$4]++ }
    END {
        for (dayNr=1; dayNr in days; dayNr++) {
            dayName = days[dayNr]
            printf "%s: %d users were logged in\n", dayName, numUsers[dayName]
        }
    }
'

因此,您始终可以获得每天的输出,包括no-one登录的天数,并且这些天数按您喜欢的工作日顺序排序。