Como faço para listar usuários logados sem duplicatas?

7

O comando who pode ser usado para localizar usuários que efetuaram login, mas imprime valores duplicados se houver vários shells em execução. Como obtenho uma lista dos usuários atualmente conectados sem duplicatas?

    
por Anony 20.11.2017 / 06:19

1 resposta

9

Podemos canalizar a saída de who para awk para imprimir somente a primeira célula de cada registro (linha) e então canalizá-la para o comando sort , que classificará a valores alfabeticamente e produzirá apenas as entradas -u exclusivas:

who | awk '{print }' | sort -u

Ou podemos usar apenas awk em desta forma :

who | awk '!seen[]++ {print }'

Uma solução compatível com POSIX, fornecida por @dessert - onde cut usará os espaços como delimitador -d' ' e imprimirá apenas o primeiro campo de cada registro -f1 :

who | cut -d' ' -f1 | sort -u

Graças a @DavidFoerster aqui é uma sintaxe muito mais curta que não perde a informação de todos os outros colunas:

who | sort -u -k 1,1

Para os mesmos propósitos, podemos usar o comando w com a opção -h (ignorar cabeçalhos), por exemplo:

w -h | awk '!seen[]++ {print }'

Poderíamos usar também o comando users combinado com o comando rs (reshape data) com a opção de transposição -T e, em seguida, novamente sort -u :

users | rs -T | sort -u

Poderíamos usar e who -q com transposição da seguinte maneira - onde o comando head -1 irá cortar apenas a primeira linha da saída do comando anterior:

who -q | head -1 | rs -T | sort -u

Veja também:

por pa4080 20.11.2017 / 06:49