引言
當您從 Awk 系列一開始回顧我們迄今為止介紹的所有 Awk 示例時,您會注意到各個示例中的所有命令都是按順序執行的,即一個接一個。但在某些情況下,我們可能希望根據某些條件運行一些文本過濾操作,這就是流程控制語句的方法。

Awk 編程中有各種流程控制語句,包括:
-
if-else 語句 -
聲明 -
while 語句 -
do while 語句 -
中斷語句 -
繼續聲明 -
下一個聲明 -
下一個文件語句 -
退出聲明
然而,對于本系列的范圍,我們將闡述:if-else、for、while 和 do while 語句。
1. if-else 語句
if 語句的預期語法與 shell if 語句的語法類似:
if??(condition1)?{
?????actions1
}
else?{
??????actions2
}
在上述語法中,condition1和condition2是Awk表達式,actions1和actions2是滿足各自條件時執行的Awk命令。
當條件1滿足時,即為真,則執行actions1并退出if語句,否則執行actions2。
if 語句也可以擴展為 if-else_if-else 語句,如下所示:
if?(condition1){
?????actions1
}
else?if?(conditions2){
??????actions2
}
else{
?????actions3
}
對于上面的形式,如果條件 1 為 true,則執行 actions1 并退出 if 語句,否則評估條件 2,如果為 true,則執行 actions2 并退出 if 語句。然而,當條件2為假時,則執行動作3并且退出if語句。
這是使用 if 語句的一個例子,我們有一個用戶列表及其年齡存儲在文件 users.txt 中。
我們想要打印一條聲明,指明用戶的姓名以及用戶的年齡是小于還是大于 25 歲。

我們可以編寫一個簡短的shell腳本來執行上面的工作,以下是腳本的內容:
#!/bin/bash
awk?'?{?
????????if?(?$3?<=?25?){
???????????print?"User",$1,$2,"is?less?than?25?years?old."?;
????????}
????????else?{
???????????print?"User",$1,$2,"is?more?than?25?years?old"?;?
}
}'????~/users.txt
然后保存文件并退出,使腳本可執行并運行,如下所示:
$?chmod?+x?test.sh
$?./test.sh
-
輸出結果

2. for 語句
如果您想在循環中執行某些 Awk 命令,則 for 語句為您提供了一種合適的方法,其語法如下:
這里,該方法簡單地定義為使用計數器來控制循環執行,首先需要初始化計數器,然后根據測試條件運行它,如果為真,則執行操作,最后遞增計數器。當計數器不滿足條件時循環終止。
for?(?counter-initialization;?test-condition;?counter-increment?){
??????actions
}
以下 Awk 命令顯示了 for 語句的工作原理,我們要在其中打印數字 0-10:
$?awk?'BEGIN{?for(counter=0;counter<=10;counter++){?print?counter}?}'
-
輸出結果

3. while 語句
while 語句的常規語法如下:
while?(?condition?)?{
??????????actions
}
條件是一個 Awk 表達式,操作是條件為真時執行的 Awk 命令行。下面是一個腳本來說明如何使用 while 語句來打印數字 0-10:
#!/bin/bash
awk?'?BEGIN{?counter=0?;
?????????
????????while(counter<=10){
??????????????print?counter;
??????????????counter+=1?;
?????????????
}
}??
保存文件并使腳本可執行,然后運行它:
$?chmod?+x?test.sh
$?./test.sh

4. do while 語句
它是上面 while 語句的修改,具有以下底層語法:
do?{
?????actions
}
?while?(condition)?
細微的差別在于,在 do while 下,Awk 命令在評估條件之前執行。使用上面 while 語句下的示例,我們可以通過更改 test.sh 腳本中的 Awk 命令來說明 do while 的用法,如下所示:
#!/bin/bash
awk?'?BEGIN{?counter=0?;??
????????do{
????????????print?counter;??
????????????counter+=1?;????
????????}
????????while?(counter<=10)???
}?
修改腳本后,保存文件并退出。然后使腳本可執行并按如下方式執行:
$?chmod?+x?test.sh
$?./test.sh
結果如上圖一致。
總結
Awk 系列的這一部分應該讓您清楚地了解如何根據特定條件控制 Awk 命令的執行。
本文由 mdnice 多平臺發布