我写了这个简单的 awk 程序:
last -n 10 | awk'{print "username: " $1}'
当我得到以下输出时,我感到很惊讶:
> username: someUsername1
> username: someUsername2
> username: someUsername3
> ...
> username: someUsername10
> username:
> username: wtmp
使用last -n 10 | wc -l
我了解到该last
命令返回的行比我给它的数字多了两行(输出是12
)
我检查了一下man last
,没有找到任何关于这两条额外的线或如何摆脱它们的信息。
那些空白行和“wtmp”行是什么?我怎么能忽略它们呢? (也许在 awk 的一边?)
谢谢!
答案1
一个通用的解决方案在任何地方都适用,并且当登录数据库中的条目少于十个时,可以修剪最后两行:
last -n 10 | head -n -2 | awk'{print "username: " $1}'
最新版本util-linux
(2.30.2 及更高版本)允许wtmp
删除该行:
last -n 10 --time-format=notime | awk'{print "username: " $1}'
答案2
如果我在没有任何参数的情况下最后运行,我会得到以下输出:
wtmp begins Fri Sep 22 18:15:02 2017
前面还有一个空行。这是记录登录的日期。
你可以使用 head 来摆脱这个问题。
last | head -n10