如何列出没有重复的登录用户?

Ano*_*ony 7 command-line users who

who命令可用于查找登录用户,但如果有多个 shell 正在运行,它会打印重复的值。如何获得没有重复的当前登录用户的列表?

pa4*_*080 9

我们可以whoawkto的输出通过管道只打印每条记录(行)的第一个单元格,然后通过管道将其传输到 command sort,它将按字母顺序对值进行排序并仅输出唯一的-u条目:

who | awk '{print $1}' | sort -u
Run Code Online (Sandbox Code Playgroud)

或者,我们只能使用awk这样

who | awk '!seen[$1]++ {print $1}'
Run Code Online (Sandbox Code Playgroud)

@dessert提供的符合 POSIX 的解决方案- 其中cut将使用空格作为分隔符-d' ',并将仅打印每条记录的第一个字段-f1

who | cut -d' ' -f1 | sort -u
Run Code Online (Sandbox Code Playgroud)

感谢@DavidFoerster,这里的语法更短,不会丢失所有其他列的信息:

who | sort -u -k 1,1
Run Code Online (Sandbox Code Playgroud)

出于同样的目的,我们可以使用w带有选项-h(忽略标题)的命令,例如:

w -h | awk '!seen[$1]++ {print $1}'
Run Code Online (Sandbox Code Playgroud)

我们也可以将命令users与命令rs(reshape data)与 transpose 选项结合使用-T,然后再次使用sort -u

users | rs -T | sort -u
Run Code Online (Sandbox Code Playgroud)

我们可以通过who -q以下方式使用 和转置 - 该命令head -1将仅裁剪上一个命令输出的第一行:

who -q | head -1 | rs -T | sort -u
Run Code Online (Sandbox Code Playgroud)

也可以看看:

  • @muru,你说得对。我已经从答案中删除了 [时间比较](https://askubuntu.com/revisions/978265/11) 部分。 (2认同)