web-dev-qa-db-fra.com

Comment lister les utilisateurs connectés sans doublons?

La commande who peut être utilisée pour rechercher des utilisateurs connectés, mais elle imprime les valeurs en double si plusieurs shells sont en cours d'exécution. Comment obtenir une liste des utilisateurs actuellement connectés sans doublons?

7
Anony

Nous pouvons diriger la sortie de who vers awk pour n’imprimer que la première cellule de chaque enregistrement (ligne), puis à la commande sort, qui triera les valeurs par ordre alphabétique et ne produira que les entrées uniques -u:

who | awk '{print $1}' | sort -u

Ou nous pouvons utiliser uniquement awk dans de cette façon :

who | awk '!seen[$1]++ {print $1}'

Une solution compatible POSIX, fournie par @ dessert - où cut utilisera les espaces comme délimiteur -d' ' et n'imprimera que le premier champ de chaque enregistrement -f1:

who | cut -d' ' -f1 | sort -u

Grâce à @ DavidFoerster , voici une syntaxe beaucoup plus courte qui ne perd pas les informations de toutes les autres colonnes:

who | sort -u -k 1,1

Aux mêmes fins, nous pourrions utiliser la commande w avec l'option -h (ignorer les en-têtes), par exemple:

w -h | awk '!seen[$1]++ {print $1}'

Nous pourrions aussi utiliser la commande users combinée à la commande rs (données de refaçonnage) avec l'option de transposition -T, puis à nouveau sort -u:

users | rs -T | sort -u

Nous pourrions utiliser et who -q avec une transposition de la manière suivante - où la commande head -1 ne coupera que la première ligne du résultat de la commande précédente:

who -q | head -1 | rs -T | sort -u

Voir également:

9
pa4080