man signal
Будет показывать Вам отображение между числами сигнала и сигнализировать об именах.
Легче просто сделать это с sort
:
who | sort -u -k1,1
-u
флаг просит "уникальные" строки (подавите дубликаты). Ключевой флаг (-k
) говорит, чтобы только рассмотреть первое слово в каждой строке в целях отсортировать и уникальность.
Использование AWK
who | awk '!x[$1]++'
Команда терпит неудачу:
x[$1]
ассоциативный массив в массиве, индекс которого является строкой. Все массивы в AWK ассоциативны. В этом случае индекс в массив является первым полем, "кто" управляет, который является именем пользователя. Если пользователь повторяется, основной цикл увеличивает количество на пользователя путем эффективного выполнения.
Каково значение предыдущего
!
знак?
Оператор NOT является исключающим – он исключает имя пользователя, которое уже находится в ассоциативном массиве.
ответ alexi является, вероятно, тем, который Вы хотите. Это просто, коротко, и работы. Но в интересах показа, что существует много способов освежевать кошку, я хотел бы представить альтернативу:
who | awk '{print $1}' | uniq
Это использует awk для распечатывания только первого маркера от who
, имя пользователя, и затем uniq
объединить повторенные записи. Существует проблема с этим хотя: uniq
только объединяет последовательные повторные условия. На моем ноутбуке я - единственный человек, использующий машину, но если я работаю who -a
для показа всех дополнительных вещей, как процессы входа в систему, работающие на всем ttys, не, все экземпляры моего пользователя перечислены прямо друг после друга. Так, список от who
потребности, которые будут отсортированы. Если мы добавляем другой канал к команде:
who | sort | awk '{print $1}' | uniq
Это должно добиться цели.
Конечно, в этой точке мы используем четыре программы для достижения того, что alexis уже сделал с два. Кроме того, мы даже не избегаем использования программы sort
это alexis используется. Если мы хотим иметь альтернативный метод, который является действительно альтернативой, мы не можем использовать вид. Давайте попытаемся использовать только awk, как исходный плакат, казалось, пытался сделать:
who | awk '
{
array[$1]=$1
}
END{
for(i in array) {
print array[i]
}
}
'
Этот небольшой awk отрывок помещает все имена пользователей в массив в местоположении, индексированном самим именем пользователя. Это гарантирует, что, если имя пользователя подходит дважды, оно просто перезапишет то же имя пользователя, которое уже было в том месте. Затем это просто распечатывает все записи в массиве, который является уникальным списком всех имен пользователей. Для оставления свободного места, мы могли поместить его на одну строку:
who | awk '{array[$1]=$1} END {for(i in array) {print array[i]}}'
Это становится немного длинным, но это могло использовать еще одну вещь: имена действительно должны быть отсортированы. Давайте выполним массив через вид вставки так, чтобы вывод был немного более предсказуемым:
who | awk '
{
# Read the usernames into an associative array
array[$1]=$1
}
END{
# Put the usernames into an indexed array and note the length
len = 1
for(j in array) {
indexed[len] = array[j]
++len
}
# Sort the array
for (i=2; i < len; ++i) {
for (j=i; indexed[j-1] > indexed[j]; --j) {
temp = indexed[j]
indexed[j] = indexed[j-1]
indexed[j-1] = temp
}
}
# Print the unique usernames in order
for(i=1; i< len; ++i) {
print indexed[i]
}
}
'
Это читает в именах пользователей как прежде, но перед распечатыванием их, мы перемещаем их в индексный массив и сортируем этот индексный массив. Вывод будет только именами пользователей (ни одна из дополнительной информации от who
), отсортированный, без дубликатов. Что-то вроде этого:
Betty
John
Ziggy
albert
james
nicola
Теперь, можно высказать мнение, что alexis и Rahul предоставили ответы строки, однако, нет ничего, чтобы мешать Вам писать это на одной строке также:
who | awk '{array[$1]=$1} END {len = 1; for(j in array) {indexed[len] = array[j]; ++len} for (i=2; i < len; ++i) { for (j=i; indexed[j-1] > indexed[j]; --j) {temp = indexed[j]; indexed[j] = indexed[j-1]; indexed[j-1] = temp }} for(i=1; i< len; ++i) {print indexed[i]}}'
Надежда, которая помогает.