该who
命令可用于查找已登录的用户,但如果有多个 shell 正在运行,它会打印重复的值。如何获取当前登录的用户列表而不包含重复项?
答案1
我们可以通过管道将输出输出who
到awk
只打印第一个细胞每个记录(行),然后将其通过管道传输到命令sort
,该命令将按字母顺序对值进行排序,并且仅输出唯一的-u
条目:
who | awk '{print $1}' | sort -u
或者我们只能awk
使用这边走:
who | awk '!seen[$1]++ {print $1}'
符合 POSIX 的解决方案,由@甜点-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
也可以看看: