awk命令個人總結(以CentOS 6.3環境下shell為例)
最近學了一點Shell裡的awk命令基礎。下面根據自己所學做一些總結,僅供日後翻閱。如有錯誤,煩請指正。
awk是什麼。
awk其實算是一種程式設計語言,仔細拓展開可以有好多好多內容,而我學的知識一點皮毛,可能連入門都算不上了。在Linux下,awk可以用來對一些文本資料進行篩選和掃描處理。 awk是怎麼工作的。
awk一般可以搭配管道符使用,將送入awk出來的文字檔掃描處理。對於檔案的名字賦予$0,即第一個位置變數。awk一次掃描一行文本,從第一行到最後一行,尋找匹配要求的行,進行使用者操作。awk預設的分隔字元是空格或者定位字元,每一行依據分隔字元,分為多個列,或者更準確講是資料區段,分別賦予$1、$2…..
基本結構如下
`awk '條件1{操作1}條件2{操作2}'`檔案名稱
條件:一般是關聯運算式
操作:預設處理是print列印輸出處理行 awk的兩個特殊條件
BEGIN和END,這兩個放在條件位置,可以使在其他命令執行前或執行後進行BEGIN和END對應的指令。具體下面再舉例子說明。 awk的基本選項
-F 指定分隔字元,-F後面加指定的分隔字元-f 指定指令碼,-f後面加指令檔,從該指令碼中讀取awk命令,代替輸入
awk使用例子
1.先Regex匹配整個test文檔裡的空白行,每一個空白行列印一次 “blank line”
awk '/^$/{print "blank line"}' test
2.Regex匹配/etc/sysconfig/network裡的的主機名稱行,列印主機名稱
awk '/HOSTNAME/{print}' /etc/sysconfig/network
3.用-f 選項調用一個awk指令碼來對sample.txt做操作,awk指令碼是test.sh
awk -f test.sh sample.txt
4.輸出a,b,c,$1 $2 $3 分別對應輸出的a,b,c
echo a b c | awk'{print $1,$2,$3}'
5.讀取輸入的行並輸出資料區段個數
echo a b c | awk '{print $0}'
6.指定分隔字元是” : “,輸出passwd文本的第一列,即系統的使用者名稱
awk -F ":" '{print $1}' /etc/passwd //寫法1awk 'BEGIN {FS=":"}{print $1}' /etc/passwd //寫法2
7.awk中的變數,預設是空字串或者0
awk '/^$/ {x+=1} END {print x}' test //統計空白行行數並輸出
8.awk結合條件陳述式使用,因為awk都使用了BEGIN模式,所以,在沒讀取test文檔內容之前,就回把BEGIN後面的指令執行。
awk '{if($1<10) print "a"; else print "b"}' test //如果test檔案中每一行的第一個參數小於10,則輸出a,否則輸出bawk 'i=1 {} BEGIN{while(i<=10) {++i;print i}}' //i初始值為1,當i<=10,輸出i的值,i++awk 'BEGIN { do { ++x;print x } while (x<=10)}' //do-while格式awk 'BEGIN{for(i=1;i<=10;i++) print i}' //for迴圈