Shell-Script

aw | 是什麼意思?cut -d ’ ’ -f 1 - 用 grep 和 sort 應該怎麼做?

  • December 20, 2019

這是我想破譯的程式碼:

w | cut -d " " -f 1 - | grep -v USER | sort -u
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

我的猜測是它試圖將目前登錄的使用者的使用者名作為排序列表列出。

一個更簡單的方法是使用users命令。users將在一行中輸出所有登錄的使用者,但是您可以通過管道將其輸出tr ' ' '\n'sort -u在每行中獲取一個使用者:

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

這也不取決於w(輸出第一行的時間w可能是也可能不是管道輸出的一部分,具體取決於目前時間是一位數還是兩位數,具體取決於什麼實現w你正在使用)。

引用自:https://unix.stackexchange.com/questions/427872