1

我的脚本在过去 $2 天内输出 $1 最常登录的用户

#var[$i]=$(awk -F: '{print $5}' /etc/passwd);
last -s -$2days | awk '{users[$1]++} END{for(i in users){print users[i], i}}' | sort -r | head -$1 | awk '{print $2 " -- " $1}';

所以输出如下:

username -- (amount of logins)

但我正在尝试从 /etc/passwd 获取包含名字和姓氏的输出,所以它是:

first and last name, username -- (amount of logins)

但我试图提出的每一个想法似乎都不适合我。我尝试使用 /etc/passwd 循环 awk,然后在另一个 awk 中使用 -v 或尝试将第二个 awk 的输出放入数组中,然后将其与 /etc/passwd 进行比较,但我无法使任何一个工作。有谁知道如何处理这个问题?

4

1 回答 1

2

这应该让你开始:

awk 'NR==FNR{name[$1]=$5;next} {u[$1]++}
    END{for(x in u)printf "%s, %s -- %d\n", name[x],x,u[x]} ' FS=":" /etc/passwd FS=" " <(last)
  • first and last name, username -- (amount of logins)这将从last命令中输出所有内容
  • 您可能想last通过添加一些必需的选项来调整命令
  • sort和省略了head,相信你可以搞定
于 2020-04-10T17:29:30.437 回答