用于计算每天登录次数的Shell脚本

时间:2016-03-21 14:57:34

标签: bash shell

我是Shell编程的新手。我尝试编写一个shell脚本来计算某些机器上用户每周每天的登录次数

输出应如下所示:

123 Mon
231 Tue
555 Wed
21  Thu
44  Fri
123 Sat
10  Sun

我尝试使用命令last,uniq并按此类排序

last -s -7days | awk '{print $1, $4,$5,$6}' | uniq -cd |sort -u

但我认为我错过了一些东西,因为我以某种方式获得了重复的结果。另外,我不确定如何将总计数除以天数。

1 个答案:

答案 0 :(得分:1)

uniq的问题是它只会折叠相邻的重复行。在你的情况下,uniq上的-d隐藏了分解重复行的行,我猜你在当天的登录尝试之间有一些类似于reboot 4.4.5-1-ARCH Wed Mar的行。您也会遇到多个用户登录分解其他用户的计数的问题。

通常你sort | uniq获取uniq行的真实列表,但是如果删除-d,你最终会得到你不想要的行。最好在sort | uniq之前或之后单独筛选出这些内容。

最后,如果两行恰好匹配,最后sort -u将删除数据,我不认为这是你想要的。相反,如果您需要对计数进行排序,最好对日期列进行排序(在月份翻转时会导致一个小问题),或者使用-k FILENUM参数对您关注的其他列进行排序。

将它们结合在一起,你得到:

last -s -7days | awk '/reboot/ {next}; /wtmp/ {next}; /^$/ {next}; {print $1, $4,$5,$6}' | sort | uniq -c | sort -k 5

请注意,.../reboot/ {next};...会导致awk忽略与/中的模式匹配的行。