aw | aw 是什么意思? cut -d " " -f 1 - 用 grep 和 sort 应该做什么?

aw | aw 是什么意思? cut -d " " -f 1 - 用 grep 和 sort 应该做什么?

这是我想要破译的代码:

w | cut -d " " -f 1 - | grep -v USER | sort -u

答案1

w | cut -d " " -f 1 - | grep -v USER | sort -u

w命令显示登录的用户以及一些附加信息:

$ w
 12:59:25 up 50 days, 21:45,  4 users,  load average: 1.02, 1.03, 1.01
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
bill      pts/12   xxx.xxx.xxx.xxx  12:55    0.00s  0.03s  0.03s tmux
bill      pts/14   tmux(64415).%0   12:55    0.00s  0.05s  0.03s w
dave      pts/18   yyy.yyy.yyy.yyy  Wed09   23:52m  1:15   1:07  vim clear_snapshots.pl
dave      pts/2    yyy.yyy.yyy.yyy  Tue14   23:48m  3.65s  3.65s -bash

cut -d " " -f 1 -命令提取其中的第一个空格分隔列(-可以删除末尾的 ):

$ w | cut -d " " -f 1

USER
bill
bill
dave
dave

grep -v USER删除包含字符串的所有行USER

$ w | cut -d " " -f 1 | grep -v USER

bill
bill
dave
dave

sort -u按字典顺序对其输入进行排序,并删除重复的行:

$ w | cut -d " " -f 1 | grep -v USER | sort -u

bill
dave

我的猜测是,它尝试将当前登录的用户的用户名作为排序列表列出。

一种更简单的方法是使用命令usersusers将在一行中输出所有登录的用户,但您可以通过管道将其传递tr ' ' '\n'sort -u每行获取一个用户:

users | tr ' ' '\n' | sort -u

另外,这不取决于生成的格式w(输出第一行的时间w可能是也可能不是管道输出的一部分,具体取决于当前时间是一位还是两位数,具体取决于实现方式你w正在使用的)。

相关内容