iT邦幫忙

0

請問這unix指今是作什麼用的

  • 分享至 

  • xImage

我有1串指令及變數但不知是作什麼用的.請問有人可以幫我解決嗎?
'who -m|awk '{print$b}' | cut -f2 -d '('|cot -fl -d ')'':0

tombo iT邦高手 1 級 ‧ 2010-02-24 12:00:21 檢舉
Pipe 符號,就是把前一個指令輸出,傳送到下一個指令的輸入,
所以你只要一個一個去分析,很容易就看懂它在做什麼!
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

6
bizpro
iT邦大師 1 級 ‧ 2010-02-05 10:52:30
最佳解答

這個指令是錯的. 解釋如下:
在who前面的單引號和冒號前的單引號是一對嗎?如果是, 就很奇怪了, 如果是命令引號, 則字串中的一串命令將形成一個命令.
首先, who -m 將所找出誰由stdin登入的資訊為一字串.
交給awk去處理, 但這裏的awk '{print $b}'是很奇怪的, $b是啥東西
呢?
接下來的cut -f2 -d '('是要把該字串以左括號分隔為不同的欄位, 取出第二個欄位.
再下來的cot -fl -d ')'':0中應該不是cot, f後應該是1, 不是l, 而最後的':0並不對.
應該是cut -f1 -d ')'把上一字串以右括號分隔為不同的欄位, 取出第一個欄位.

這一題的確需要「訂正題目」。
以我的執行狀況為例:

<pre class="c" name="code">who -m
xxx      pts/5        2010-02-05 09:24 (winxp:S.4)
$ who -m| awk '{print $5}' | cut -f2 -d'(' | cut -f1 -d')'
winxp:S.4

我想,這一題應是想解出目前虛擬終端機,是從哪邊登入進來資訊,
所以可能是想要排除掉「:0」的字樣。
但我實際 who 出來的情況是:

<pre class="c" name="code">
xxx      pts/1        2010-02-05 07:54 (winxp:S.0)
xxx      pts/2        2010-02-05 07:54 (winxp:S.1)
xxx      pts/3        2010-02-05 08:04 (winxp:S.2)
xxx      pts/4        2010-02-05 08:07 (winxp:S.3)
xxx      pts/5        2010-02-05 09:24 (winxp:S.4)
xxx      pts/6        2010-02-05 11:37 (winxp)
xxx      pts/7        2010-02-05 11:37 (:1.0)

除了pts/6,7之外的情況可這樣執行:

<pre class="c" name="code">
who -m| awk '{print $5}' | sed -e 's/(\(.*\):.*)/\1/'
winxp


還需要再考慮能夠 match 各種從哪些登入 who 的 pattern,
才能順利抓到正確資訊。

bizpro iT邦大師 1 級 ‧ 2010-02-05 14:06:04 檢舉

twtw大, 您真是聰明, 那個$b應該是$5, 所以是awk '{print $5}'
如果是這樣, 根本不需要awk了, 因為cut -f2 -d '('就已經將左括號本身及其左側的東西全移掉了.

感謝兩位高手大大的回答,謝謝

我要發表回答

立即登入回答