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?
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: