什么是awk
? ? awk 是一門解釋型的編程語言篮赢,支持條件判斷齿椅,數(shù)組、循環(huán)等功能启泣』两牛可用于文本處理、輸出格式化的文本信息寥茫、執(zhí)行數(shù)學(xué)運(yùn)算遣蚀、字符串等操作。
? ? awk在處理文件時(shí)按行進(jìn)行逐行處理纱耻,即每次處理輸入的一整行芭梯,完成后再處理下一行,如此循環(huán)直到全部處理完畢弄喘,默認(rèn)以換行符作為一行的終結(jié)玖喘。而在一行中又默認(rèn)使用空格做為每一列的分隔符,將一行分割為多列蘑志。如下所示:
$0:代表輸入的一整行
$1~$n:代表一行被分割后的列序號累奈,$1則代表為第一列,依次類推
工作原理
- 第一步
? awk讀取一條記錄作為輸入急但,并將這條記錄傳遞給內(nèi)部變量 $0 - 第二步
? 記錄被分隔符分割成多個(gè)字段澎媒,每一個(gè)字段被存儲(chǔ)到指定編號的變量中,從 $1 開始波桩〗渑可使用 -F 指定分隔符,awk默認(rèn)分隔符為空格 - 第三步
? 對于每一條記錄镐躲,按照給定的pattern進(jìn)行匹配柏卤,匹配成功則執(zhí)行對應(yīng)的action,匹配失敗匀油,則不執(zhí)行action缘缚。 - 第四步
? 重復(fù)第1~3步直到結(jié)束
基本語法
awk [options] 'Pattern { Action }' File
常用選項(xiàng)
常用選項(xiàng)如下所示:
選項(xiàng) | 說明 |
---|---|
-F fs | 指定分隔符 |
-v var=val | 自定義定義變量并進(jìn)行賦值 |
-f program-file | 從文件中讀入操作 |
-r,--re-interval | 支持以{x,y}的正則匹配 |
-h | 顯示幫助信息 |
Pattern
? ? awk 中模式可以理解為在處理文本行前需要滿足的條件,如果滿足則進(jìn)行處理敌蚜。常用的模式(Pattern)如下所示:
- BEGIN { 語句 }:指定在處理文本之前需要進(jìn)行的操作
- END { 語句 }: 指定在文件文本之后需要進(jìn)行的操作
- 表達(dá)式 { 語句 }:對于表達(dá)式為真時(shí)需要進(jìn)行的操作
- /正則表達(dá)式/ { 語句 }:對正則表達(dá)式能匹配的結(jié)果需要進(jìn)行的操作
如果遇到 / 桥滨,則需要進(jìn)行轉(zhuǎn)義操作,使用 /
如果正則需要使用{x,y},則需要使用--posix或--re-interval選項(xiàng)
- 組合模式 { 語句 }:通過與(&&)齐媒、或(||)和非(|)或者{}組合的多個(gè)表達(dá)式蒲每,需要進(jìn)行的操作
- 模式1,模式2 { 語句 }:范圍模式(range pattern) 匹配從與模式1匹配的行到與模式2相匹配的行(包含該行)之間所有的行需要進(jìn)行操作
? ? awk 支持的條件運(yùn)算符如下所示:
運(yùn)算符 | 含義 | 示例 |
---|---|---|
< | 小于 | x < y |
<= | 小于等于 | x <= y |
> | 大于 | x > y |
>= | 大于等于 | x >= y |
== | 等于 | x == y |
!= | 不等于 | x != y |
~ | 與正則匹配則為真 | x ~/正則/ |
!~ | 與正則不匹配則為真 | x !~/正則/ |
1喻括、常規(guī)用法:
2邀杏、正則表達(dá)式用法:
Action
? ? awk 中的操作(Action)其主要作用是對符合模式的數(shù)據(jù)進(jìn)行的命令操作,如顯示打印等唬血。最常用的就是print望蜡。
Action的 { } 必須與其對應(yīng)的模式處理同一行
Action常用組合方式如下所示:
- 方式一:在這種方式中,各個(gè)動(dòng)作間是順序執(zhí)行拷恨,即執(zhí)行完成第一個(gè)動(dòng)作后脖律,再執(zhí)行第二個(gè),等最后一個(gè)動(dòng)作執(zhí)行完成后腕侄,再重復(fù)第一個(gè)動(dòng)作小泉,如此循環(huán)直到結(jié)束。因此輸出的結(jié)果也是每個(gè)動(dòng)作一行
awk '{print $1} {print $2}'
- 方式二:執(zhí)行效果同方式一
awk '{print $1 ; print $2}'
- 方式三:將所的輸出結(jié)果全部打印輸出到一行上面
awk '{print $1 , $2}'
以上三種用法示例如下所示: