who
команда может использоваться для нахождения зарегистрированных пользователей, но она печатает дублирующиеся значения, если существует несколько выполнений оболочек. Как я получаю список в настоящее время зарегистрированные пользователи без дубликатов?
Мы можем передать вывод по каналу who
кому: awk
распечатать только первую ячейку каждой записи (строка) и затем передать его по каналу к команде sort
, это отсортирует значения в алфавитном порядке и произведет только уникальное -u
записи:
who | awk '{print $1}' | sort -u
Или мы можем использовать только awk
таким образом:
who | awk '!seen[$1]++ {print $1}'
POSIX совместимое решение, предоставленное @dessert - где cut
будет использовать пробелы в качестве разделителя -d' '
и распечатает только первое поле каждой записи -f1
:
who | cut -d' ' -f1 | sort -u
Благодаря @DavidFoerster вот намного более короткий синтаксис, который не теряет информацию всех других столбцов:
who | sort -u -k 1,1
В тех же целях мы могли использовать команду w
с опцией -h
(проигнорируйте заголовки), например:
w -h | awk '!seen[$1]++ {print $1}'
Мы могли использовать также команду users
объединенный с командой rs
(измените данные) с транспонировать опцией -T
и с другой стороны sort -u
:
users | rs -T | sort -u
Мы могли использовать и who -q
с перемещением следующим образом - где команда head -1
обрежет только первую строку вывода предыдущей команды:
who -q | head -1 | rs -T | sort -u
См. также: