2016-12-29 18 views
-3

我已修改的iostat -e輸出這樣一個條件打印的特定列Linux命令。使用AWK

我的樣本文件:

$ cat diskcheck.out            
hxcsvc-a02 sd2 
hxcslc-a01 sd23 
hxcslc-a02 sd14 
hxcslc-a02 sd17 
hxcslc-a02 sd18 
hxcslc-a02 sd19 
hxcslc-a03 sd11 
hxcslc-a07 sd3 
hxcslc-a09 sd2 

預期輸出:

hxcsvc-a02 sd2 
hxcslc-a01 sd23 
hxcslc-a02 sd14 sd17 sd18 sd19 
hxcslc-a03 sd11 
hxcslc-a07 sd3 
hxcslc-a09 sd2 
+2

因爲你是新來的,所以請仔細閱讀[如何提出一個好問題?] – Inian

+0

是的,我是一個新手。請幫我解決上述問題。非常感謝 – user7352907

+2

SO不是一個編碼服務!你應該讓我們知道你的代碼,你試過了什麼,以及你失敗了。 – Inian

回答

1

使用awkfile是輸入文件

一個更簡單的方法

awk 'BEGIN{delete hash;}{hash[$1]=hash[$1]FS$2}END{for (i in hash) print i, hash[i]}' file 
hxcslc-a07 sd3 
hxcslc-a09 sd2 
hxcsvc-a02 sd2 
hxcslc-a01 sd23 
hxcslc-a02 sd14 sd17 sd18 sd19 
hxcslc-a03 sd11 

$ cat file            
hxcsvc-a02 sd2 
hxcslc-a01 sd23 
hxcslc-a02 sd14 
hxcslc-a02 sd17 
hxcslc-a02 sd18 
hxcslc-a02 sd19 
hxcslc-a03 sd11 
hxcslc-a07 sd3 
hxcslc-a09 sd2 

我會盡量擊穿的答案,因爲你只是用它,

  • 一般來說,awk工藝線一次一個,並有語法awk 'BEGIN{..}{..}END{..}',其中內BEGINEND的說明在文件處理完成之前和之後以相應的順序執行。
  • 所有的列都是空白分隔的,默認情況下,awk僅通過此解除限制器分割輸入記錄。您可以分別根據需要使用FSOFS變量來更改它並輸出字段分隔。
  • 在你的情況,根據需要建立一個散列表$1(這意味着第一列由空格分隔)作爲索引和值爲$2。我將每個唯一鍵的值附加到已經存在的值上。
  • 在處理完所有行之後,在END循環中,打印唯一索引散列值及其值。

如果你想運行在與其他命令管道線上面的命令,嘗試用

<your-previous-command> | awk 'BEGIN{delete hash;}{hash[$1]=hash[$1]FS$2}END{for (i in hash) print i, hash[i]}' 

關於它的用法更詳細的說明,推薦一些Awk tutorials

+1

BEGIN部分沒有做任何有用的事情,你可以刪除它。 –