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