Der whoBefehl kann verwendet werden, um angemeldete Benutzer zu finden, druckt jedoch doppelte Werte, wenn mehrere Shells ausgeführt werden. Wie erhalte ich eine Liste der aktuell angemeldeten Benutzer ohne Duplikate?
Der whoBefehl kann verwendet werden, um angemeldete Benutzer zu finden, druckt jedoch doppelte Werte, wenn mehrere Shells ausgeführt werden. Wie erhalte ich eine Liste der aktuell angemeldeten Benutzer ohne Duplikate?
Antworten:
Wir können die Ausgabe von whoto awkweiterleiten, um nur die erste Zelle jedes Datensatzes (Zeile) zu drucken, und sie dann an den Befehl sortweiterleiten, der die Werte alphabetisch sortiert und nur die eindeutigen -uEinträge ausgibt :
who | awk '{print $1}' | sort -u
Oder wir können nur verwenden awkin dieser Art und Weise :
who | awk '!seen[$1]++ {print $1}'
Eine POSIX-kompatible Lösung von @dessert, bei cutder die Leerzeichen als Trennzeichen verwendet werden -d' 'und nur das erste Feld jedes Datensatzes gedruckt wird -f1:
who | cut -d' ' -f1 | sort -u
Dank @DavidFoerster gibt es hier eine viel kürzere Syntax, bei der die Informationen aller anderen Spalten nicht verloren gehen:
who | sort -u -k 1,1
Für die gleichen Zwecke könnten wir den Befehl wmit der Option -h(Header ignorieren) verwenden, zum Beispiel:
w -h | awk '!seen[$1]++ {print $1}'
Wir könnten auch den Befehl in usersKombination mit dem Befehl rs(Daten umformen) mit der Transponierungsoption verwenden -Tund dann noch einmal sort -u:
users | rs -T | sort -u
Wir könnten und who -qmit Transposition folgendermaßen verwenden - wobei der Befehl head -1nur die erste Zeile der Ausgabe des vorherigen Befehls zuschneidet:
who -q | head -1 | rs -T | sort -u
Siehe auch:
wund whoist nicht alphabetisch sortiert, daher habe ich absichtlich sort -uin der ersten Lösung verwendet. Auch die Ausgabe von who -qsollte transponiert werden (wie im letzten Beispiel), sonst ist das Ergebnis nicht korrekt.
who -qMöglicherweise suchen Sie jedoch nach einem System, auf dem mehrere Benutzer gleichzeitig gehostet werden, sind sich jedoch nicht sicher.