'last -n'がn行のユーザーのみを返すようにするにはどうすればよいですか?

'last -n'がn行のユーザーのみを返すようにするにはどうすればよいですか?

私は次のような単純なawkプログラムを書いた。

last -n 10 | awk'{print "username: " $1}'

私は次のような結果を得たときに驚きました。

> username: someUsername1
> username: someUsername2
> username: someUsername3
> ...
> username: someUsername10
> username: 
> username: wtmp

これを使用して、コマンドが私が提供した数より2行多く返したことlast -n 10 | wc -lを知りました(出力は)。last12

確認してみると、man lastこの2つの追加行または削除方法に関する情報が見つかりませんでした。

空行と「wtmp」行は何ですか?私はどのようにそれらを無視できますか? (たぶん変な方でしょうか?)

ありがとうございます!

答え1

どこでも動作し、ログインデータベースのエントリが10個未満の場合、最後の2行を切り捨てる一般的なソリューションです。

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

関連情報