![每个用户最近 5 次登录 Linux](https://linux22.com/image/99065/%E6%AF%8F%E4%B8%AA%E7%94%A8%E6%88%B7%E6%9C%80%E8%BF%91%205%20%E6%AC%A1%E7%99%BB%E5%BD%95%20Linux.png)
所以我试图使用 bash 脚本获取所有用户的 X 次最后登录,但有谁知道如何准确地仅提取日期,以便我可以在某种表中创建一组?使用最后我得到这样的输出:
yogi pts/0 192.168.0.103 Fri Nov 18 07:04 - 07:05 (00:00)
yogi pts/1 10.8.3.6 Thu Nov 17 14:36 - 16:53 (02:17)
yogi pts/0 10.8.3.6 Thu Nov 17 14:32 - 16:45 (02:12)
因此,使用 awk '{print $1, $4, $5, $6,}' 我只能走那么远,但是否可以得到这样的东西:
name surname login date1 date2 date3 date4 etc.
我现在为此绞尽脑汁;/
答案1
在 Gnu awk 中:
$ cat program.awk
NR==FNR {
split($5,a,",")
b[$1]=a[1]
next
}
($1 in b) && ++c[$1]<=5 {
d[$1]=d[$1] $4 " " $5 " " $6 (c[$1]==5?"":OFS)
}
END {
for (i in d)
print b[i], i, d[i]
}
运行:
awk -f program.awk OFS=", " FS=":" /etc/passwd FS=" +" <(last)
James Brown, james, Sat Nov 19, Wed Nov 16, Tue Nov 15, Mon Nov 14, Sun Nov 13
因为我在笔记本电脑上,所以这是一个坏例子。输出的顺序是 Gnu awk 默认的,即。随机的。如果需要,可以更改遍历顺序PROCINFO["sorted_in"]="@ind_str_asc"
。