什麼是awk awk 是一門解釋型的編程語言,支持條件判斷,數組、迴圈等功能。可用於文本處理、輸出格式化的文本信息、執行數學運算、字元串等操作。 awk在處理文件時按 行 進行逐行處理,即每次處理輸入的一整行,完成後再處理下一行,如此迴圈直到全 ...
什麼是awk
awk 是一門解釋型的編程語言,支持條件判斷,數組、迴圈等功能。可用於文本處理、輸出格式化的文本信息、執行數學運算、字元串等操作。
awk在處理文件時按行進行逐行處理,即每次處理輸入的一整行,完成後再處理下一行,如此迴圈直到全部處理完畢,預設以換行符作為一行的終結。而在一行中又預設使用空格做為每一列的分隔符,將一行分割為多列。如下所示:
$0:代表輸入的一整行
$1~$n:代表一行被分割後的列序號,$1則代表為第一列,依次類推
工作原理
- 第一步
awk讀取一條記錄作為輸入,並將這條記錄傳遞給內部變數 $0 - 第二步
記錄被分隔符分割成多個欄位,每一個欄位被存儲到指定編號的變數中,從 $1 開始。可使用 -F 指定分隔符,awk預設分隔符為空格 - 第三步
對於每一條記錄,按照給定的pattern進行匹配,匹配成功則執行對應的action,匹配失敗,則不執行action。 - 第四步
重覆第1~3步直到結束
基本語法
awk [options] 'Pattern { Action }' File
常用選項
常用選項如下所示:
選項 | 說明 |
---|---|
-F fs | 指定分隔符 |
-v var=val | 自定義定義變數併進行賦值 |
-f program-file | 從文件中讀入操作 |
-r,--re-interval | 支持以{x,y}的正則匹配 |
-h | 顯示幫助信息 |
Pattern
awk 中模式可以理解為在處理文本行前需要滿足的條件,如果滿足則進行處理。常用的模式(Pattern)如下所示:
- BEGIN { 語句 }:指定在處理文本之前需要進行的操作
- END { 語句 }: 指定在文件文本之後需要進行的操作
- 表達式 { 語句 }:對於表達式為真時需要進行的操作
/正則表達式/ { 語句 }:對正則表達式能匹配的結果需要進行的操作
如果遇到 / ,則需要進行轉義操作,使用 /
如果正則需要使用{x,y},則需要使用--posix或--re-interval選項- 組合模式 { 語句 }:通過與(&&)、或(||)和非(|)或者{}組合的多個表達式,需要進行的操作
模式1,模式2 { 語句 }:範圍模式(range pattern) 匹配從與模式1匹配的行到與模式2相匹配的行(包含該行)之間所有的行需要進行操作
awk 支持的條件運算符如下所示:
運算符 | 含義 | 示例 |
---|---|---|
< | 小於 | x < y |
<= | 小於等於 | x <= y |
> | 大於 | x > y |
>= | 大於等於 | x >= y |
== | 等於 | x == y |
!= | 不等於 | x != y |
~ | 與正則匹配則為真 | x ~/正則/ |
!~ | 與正則不匹配則為真 | x !~/正則/ |
1、常規用法:
2、正則表達式用法:
Action
awk 中的操作(Action)其主要作用是對符合模式的數據進行的命令操作,如顯示列印等。最常用的就是print。
Action的 { } 必須與其對應的模式處理同一行
Action常用組合方式如下所示:
- 方式一:在這種方式中,各個動作間是順序執行,即執行完成第一個動作後,再執行第二個,等最後一個動作執行完成後,再重覆第一個動作,如此迴圈直到結束。因此輸出的結果也是每個動作一行
awk '{print \$1} {print \$2}'
- 方式二:執行效果同方式一
awk '{print \$1 ; print \$2}'
- 方式三:將所的輸出結果全部列印輸出到一行上面
awk '{print \$1 , \$2}'
以上三種用法示例如下所示:
本文同步在微信訂閱號上發佈,如各位小伙伴們喜歡我的文章,也可以關註我的微信訂閱號:woaitest,或掃描下麵的二維碼添加關註: