參考地址:http://linux.chinaunix.net/techdoc/develop/2007/02/10/950229.shtml
html
http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html
linux
http://www.cnblogs.com/repository/archive/2011/05/13/2045927.html
shell
相較於 sed 經常做用於一整個行的處理, awk 則比較傾向於一行當中分紅數個『字段』來處理。 所以,awk 至關的適合處理小型的數據數據處理呢!awk 一般運做的模式是這樣的:
[root@linux ~]# awk '條件類型1{動做1} 條件類型2{動做2} ...' filename awk 能夠處理後續接的檔案,也能夠讀取來自前個指令的 standard output 。 但如前面說的, awk 主要是處理『每一行的字段內的數據』,而預設的『字段的分隔符爲 "空格鍵" 或 "[tab]鍵" 』!舉例來講,咱們用 last 能夠將登入者的數據取出來, 結果以下所示:
[root@linux ~]#lastdmtsai pts/0 192.168.1.12 Mon Aug 22 09:40 still logged in
root tty1 Mon Aug 15 11:38 - 11:39 (00:01)
reboot system boot 2.6.11 Sun Aug 14 18:18 (7+15:41)
dmtsai pts/0 192.168.1.12 Fri Aug 12 12:07 - 12:08 (00:01)
若我想要取出帳號與登入者的 IP ,且帳號與 IP 之間以 [tab] 隔開,則會變成這樣:
[root@linux ~]# last | awk '{print $1 "\t" $3}'
dmtsai 192.168.1.12
root Mon
reboot boot
dmtsai 192.168.1.12
由於不論哪一行我都要處理,所以,就不須要有 "條件類型" 的限制!我所想要的是第一欄以及第三欄, 可是,第二行及第三行的內容怪怪的~這是由於數據格式的問題啊!因此囉~使用 awk 的時候,請先確認一下您的數據當中,若是是連續性的數據,請不要有空格或 [tab] 在內,不然,就會像這個例子這樣,會發生誤判喔!
另外,由上面這個例子您也會知道,在每一行的每一個字段都是有變量名稱的,那就是 $1, $2... 等變量名稱,以上面的例子來講, dmtsai 是 $1 ,由於他是第一欄嘛!至於 192.168.1.12 是第三欄, 因此他就是 $3 啦!後面以此類推~呵呵!還有個變數喔!那就是 $0 ,$0 表明『一整列資料』的意思~ 以上面的例子來講,第一行的 $0 表明的就是『dmtsai pts/0.... 』那一行啊! 由此可知,剛剛上面四行當中,整個 awk 的處理流程是:
bash
|