awk是行處理器: 相比較屏幕處理的優勢,在處理龐大文件時不會出現內存溢出或是處理緩慢的問題,一般用來格式化文本信息。
awk處理過程: 依次對每一行進行處理,而後輸出 。正則表達式
awk命令形式:
awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file ide
[-F|-f|-v] 大參數,-F指定分隔符,-f調用腳本,-v定義變量 var=value
BEGIN 初始化代碼塊,在對每一行進行處理以前,初始化代碼,主要是引用全局變量,設置FS分隔符
END 結尾代碼塊,在對每一行進行處理以後再執行的代碼塊,主要是進行最終計算或輸出結尾摘要信息
// 匹配代碼塊,能夠是字符串或正則表達式
{} 命令代碼塊,包含一條或多條命令
; 多條命令使用分號分隔 ui
awk的特殊符號:
$0:表示整個當前行
$1:每行第一個字段
NF:字段數量變量
NR:每行的記錄號,多文件記錄遞增
FNR:與NR相似,不過多文件記錄不遞增,每一個文件都從1開始
FS:BEGIN時定義分隔符(至關於-F)
RS:輸入的記錄分隔符, 默認爲換行符(即文本是按一行一行輸入)
~:匹配,與==相比不是精確比較
!~:不匹配,不精確比較
==:等於,必須所有相等,精確比較
!=:不等於,精確比較
+:匹配時表示1個或1個以上
OFS:輸出字段分隔符, 默認也是空格,能夠改成製表符等
ORS:輸出的記錄分隔符,默認爲換行符,即處理結果也是一行一行輸出到屏幕 this
print:是awk打印指定內容的主要命令(標準化輸出)
printf:格式化輸出內存
下面舉幾個例子,能更便於理解!!!
1、
這裏是經過awk把/etc/passwd 中的用戶名拿到,其中 '{}' 是固定格式。
-F: 是選定以:做爲分隔符,若是是以空格做爲分隔符,則直接默認不用寫。字符串
2、
這個例子則是把/etc/passwd下的gid和uid拿出來。printf是格式化輸出,默認不會換行,而其中的「\n」和「\t」則是換行及有一個table鍵的距離。it
3、
這個例子中NR是指行號,但$NR是默認每一行的結尾的那個字符段。$0是匹配的整行。for循環
4、
這是BEGIN以及END的格式及應用,其中的{FS=":"}和-F:是相同的。後面打印的this are usernames,在最後一行打印。table
5、
這是經過給X賦值的方式,來尋找/etc/fstab中的空行數。class
6、
這個例子是計算uid的總和
7、
在awk中能夠使用if判斷和for循環,其中<(小於)、>(大於)、>=(大於等於)
8、
是經過~進行匹配,只匹配以lpp或者root開頭的行數
9、
uid和gid的和若是大於二百輸出
10、
其中是查看空閒內存,並把以Kb爲單位換算爲Mb爲單位。