Ano*_*ony 7 command-line users who
该who命令可用于查找登录用户,但如果有多个 shell 正在运行,它会打印重复的值。如何获得没有重复的当前登录用户的列表?
我们可以who将awkto的输出通过管道只打印每条记录(行)的第一个单元格,然后通过管道将其传输到 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)
也可以看看: