Как я перечисляю зарегистрированных пользователей без дубликатов?

who команда может использоваться для нахождения зарегистрированных пользователей, но она печатает дублирующиеся значения, если существует несколько выполнений оболочек. Как я получаю список в настоящее время зарегистрированные пользователи без дубликатов?

7
задан 20 November 2017 в 02:41

1 ответ

Мы можем передать вывод по каналу 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

См. также:

9
ответ дан 23 November 2019 в 06:28

Другие вопросы по тегам:

Похожие вопросы: