como posso fazer 'last -n' retornar apenas as n linhas de usuários?

0

Eu escrevi este programa awk simples:

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

Fiquei surpreso quando recebi a seguinte saída:

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

usando last -n 10 | wc -l i aprendeu que o comando last retorna mais duas linhas do que o número que eu dei a ele (a saída foi 12 )

Eu verifiquei em man last e não encontrei nada sobre essas duas linhas extras ou como se livrar delas.

quais são as linhas em branco e 'wtmp'? e como posso ignorá-los? (talvez no lado do awk?)

Obrigado!

    
por Z E Nir 05.11.2018 / 11:58

2 respostas

1

Uma solução genérica que funcionará em todos os lugares, e quando houver menos de dez entradas no banco de dados de login, é aparar as duas últimas linhas:

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

Versões recentes de util-linux (2.30.2 e posteriores) permitem que a linha wtmp seja descartada:

last -n 10 --time-format=notime | awk'{print "username: " $1}'
    
por 05.11.2018 / 12:16
0

Se eu correr por último sem nenhum argumento, recebo a seguinte saída:

wtmp begins Fri Sep 22 18:15:02 2017

E uma linha vazia antes disso. Esta é a data a partir da qual os logins são registrados.

Você pode se livrar disso usando a cabeça.

last | head -n10
    
por 05.11.2018 / 12:09

Tags