linux三劍客awk命令詳解之動作(action)

awk命令的使用語法
awk [options] ‘{pattern + action}’ {filenames}

在之前的文章中,action最常使用的是打印輸出,示例:
在這裏插入圖片描述
這裏的動作’{print $2}‘可拆分成兩部分去理解:
1)’{ }’ 最外層的花括號屬於‘組合語句’類型的動作,即將多個代碼組合成代碼塊,比如條件語句代碼塊、循環語句代碼塊。
2)‘print $2’ 屬於‘輸出語句類型的動作’,即執行特定的動作。
當awk命令語句中有兩個分開的花括號,可以把這兩個花括號看成兩個獨立的個體,示例如下:
在這裏插入圖片描述
當然,上述命令也可以放在一個花括號內,將多個動作組合成一個整體,需要注意的是多個動作之間要用分號’;'間隔開,示例如下:
在這裏插入圖片描述
當然,對於上述命令中的printf動作來說,可以使用一條語句就可以實現:
在這裏插入圖片描述
控制語句動作

除了簡單的輸出語句動作,awk命令也支持控制語句動作,如條件判斷語句,示例如下:

if條件判斷語句

  • 單分支語句
    在這裏插入圖片描述
    ⚠️最外面的花括號屬於組合語句動作系列,而裏面的花括號可以看作是條件判斷語句的一部分。
  • 雙分支語句
    在這裏插入圖片描述
  • 多分支語句
    在這裏插入圖片描述
    awk命令中的動作action同樣支持循環控制語句,如while,do/while,for,break,continue,這些關鍵字的語義與其他編程語言完全相同。

for循環語句

對每一行的第二列重複輸出3次
在這裏插入圖片描述
上述功能同樣可以使用while循環語句來實現:
在這裏插入圖片描述
while語句需要注意的是
1)首先需要對變量進行初始化,默認會初始化爲0
2)讀完文本內容的一行及滿足while循環退出條件後,需要將條件置爲初始狀態,才能正確的去執行下一行內容,否則,不滿足循環的條件,沒有任何的執行操作,如上圖中的黃線部分,若沒有,則只3次輸出第一行的內容,如下圖所示:
在這裏插入圖片描述
awk中的數組

awk可以看作一門腳本語言,它包含腳本語言的各種語法結構,如條件判斷語句、循環語句等。當然,awk也可以使用數組。

1)在awk命令中,使用數組不需要先聲明,也不需要聲明大小,類似於C++中的vector,直接爲數組中的元素進行賦值即可,示例如下:
在這裏插入圖片描述
圖中,紅線部分是對name數組進行賦值,黃線部分是讀取name數組中的元素,這裏使用for循環來遍歷數組中的元素,與其他腳本語言遍歷元素的方式一致。

2)數組的索引可以是數值,也可以是字符串,這與字典的格式類似了,就像一個key-value對,因爲awk中的數組是“關聯數組”示例如下:
在這裏插入圖片描述

當然也可以使用delete來刪除數組元素,示例如下:
在這裏插入圖片描述
由於該索引的元素被刪除了,所以只輸出了換行。
3)當數組元素不存在時,如果我們直接引用這個不存在的元素,awk會自動創建這個元素,並且默認爲這個元素賦值爲空字符串,當然,也可以將數組元素設置爲空,示例如下:
在這裏插入圖片描述
在這裏插入圖片描述
圖中紅色畫線部分是設置數組元素爲空字符串,藍色畫線部分是輸出一個不存在的數組元素,從結果可以看出,結果打印輸出了一個空字符串。

這說明判斷數組元素是否存在時,不能使用空字符串來判斷,可以使用語法"if (下標 in 數組名)",來判斷元素是否存在於數組中,示例如下:
在這裏插入圖片描述
數組應用於最廣泛的就是統計文本中某些字符出現的次數,示例如下:
在這裏插入圖片描述
上述命令是統計第二列每個字符出現的次數。

總結:

awk命令的動作部分支持控制語句、可以自定義變量、支持數組等結構內容,使其像一個腳本語言一樣可以實現很多強大的功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章