首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shell脚本,用于每天计数登录数

Shell脚本,用于每天计数登录数
EN

Stack Overflow用户
提问于 2016-03-21 14:57:33
回答 1查看 790关注 0票数 0

我对Shell编程很陌生。我正在尝试编写一个shell脚本来计算一周中某些机器上用户的登录次数

输出应该如下所示:

代码语言:javascript
复制
123 Mon
231 Tue
555 Wed
21  Thu
44  Fri
123 Sat
10  Sun

我试着用命令来完成它,最后,uniq,并按下面的方式排序

代码语言:javascript
复制
last -s -7days | awk '{print $1, $4,$5,$6}' | uniq -cd |sort -u

但我想我错过了什么,因为我得到了重复的结果。此外,我也不知道如何将总计数按天数分开。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-21 16:40:46

uniq的问题是它只折叠相邻的重复行。在您的例子中,uniq上的-d隐藏了正在拆分重复行的行,我猜您在当天的登录尝试之间有一些类似于reboot 4.4.5-1-ARCH Wed Mar的行。您在多个用户登录时也会出现问题,无法将其他用户的计数分解。

通常,您需要sort | uniq来获得一个真正的uniq行列表,但是如果您删除了-d,您最终会得到不想要的行。无论是在sort | uniq之前还是之后,最好分别对它们进行过滤。

最后,如果两行恰好匹配,最后一个sort -u将删除数据,我认为这不是您想要的。相反,最好对date列进行排序(在月滚动时会导致一个小问题),或者如果您需要对计数进行排序,则使用-k FILENUM参数的另一列进行排序。

把这些结合在一起,你就可以得到:

代码语言:javascript
复制
last -s -7days | awk '/reboot/ {next}; /wtmp/ {next}; /^$/ {next}; {print $1, $4,$5,$6}' | sort | uniq -c | sort -k 5

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36134450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档