Este é o código que desejo decifrar:

w | cut -d " " -f 1 - | grep -v USER | sort -u 

Resposta

w | cut -d " " -f 1 - | grep -v USER | sort -u 

O comando w exibe usuários que estão conectados junto com algumas informações adicionais:

$ w 12:59:25 up 50 days, 21:45, 4 users, load average: 1.02, 1.03, 1.01 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT bill pts/12 xxx.xxx.xxx.xxx 12:55 0.00s 0.03s 0.03s tmux bill pts/14 tmux(64415).%0 12:55 0.00s 0.05s 0.03s w dave pts/18 yyy.yyy.yyy.yyy Wed09 23:52m 1:15 1:07 vim clear_snapshots.pl dave pts/2 yyy.yyy.yyy.yyy Tue14 23:48m 3.65s 3.65s -bash 

O comando cut -d " " -f 1 - extrai a primeira coluna separada por espaço deste (o - no final pode ser removido):

$ w | cut -d " " -f 1 USER bill bill dave dave 

grep -v USER remove todas as linhas que contêm a string USER:

$ w | cut -d " " -f 1 | grep -v USER bill bill dave dave 

sort -u classifica sua entrada lexicograficamente e remove linhas duplicadas:

$ w | cut -d " " -f 1 | grep -v USER | sort -u bill dave 

Meu palpite é que ele tenta listar os nomes de usuário dos usuários que estão atualmente logados , como uma lista classificada.

Uma maneira mais simples de fazer isso é apenas usando o comando users. users produzirá todos os usuários conectados em uma linha, mas você pode canalizar isso por meio de tr " " "\n" e sort -u para obter um usuário por linha:

users | tr " " "\n" | sort -u 

Além disso, não depende do formato produzido por w (a hora na primeira linha da saída w pode ou não fazer parte da saída de seu pipeline, dependendo se a hora atual do dia é de um ou dois dígitos, dependendo sobre qual implementação de w você está usando).

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *