1. 程式人生 > >Linux文本處理三劍客——awk詳細用法

Linux文本處理三劍客——awk詳細用法

依次 格式 使用 換行符 引用 參數 固定 value 屏幕

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:輸出字段分隔符, 默認也是空格,可以改為制表符等

ORS:輸出的記錄分隔符,默認為換行符,即處理結果也是一行一行輸出到屏幕

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詳細用法