除了前面介紹的條件語句,AWK 還提供了循環(huán)語句。該語句的作用就是當條件為真時重復執(zhí)行一系列的命令。本章將講解 AWK 中循環(huán)語句的使用方法。
For 循環(huán)的語法如下:
for (initialisation; condition; increment/decrement)
action
for 語句首先執(zhí)行初始化動作( initialisation ),然后再檢查條件( condition )。如果條件為真,則執(zhí)行動作( action ),然后執(zhí)行遞增( increment )或者遞減( decrement )操作。只要條件為真循環(huán)就會一直執(zhí)行。每次循環(huán)結束都會進條件檢查,若條件為假則結束 循環(huán)。下面的例子使用 For 循環(huán)輸出數(shù)字 1 至 5:
[jerry]$ awk 'BEGIN { for (i = 1; i <= 5; ++i) print i }'
執(zhí)行上面的命令可以得到如下結果:
1
2
3
4
5
While 循環(huán)會一直執(zhí)行動作直到邏輯條件為假為止。其使用方法如下:
while (condition)
action
AWK 首先檢查條件是否為真,若條件為真則執(zhí)行動作。此過程一直重復直到條件為假時,則停止。下面是使用 While 循環(huán)輸出數(shù)字 1 到 5 的例子:
[jerry]$ awk 'BEGIN {i = 1; while (i < 6) { print i; ++i } }'
執(zhí)行上面的命令可以得到如下的結果:
1
2
3
4
5
Do-While 循環(huán)與 While 循環(huán)相似,但是 Do-While 的條件測試放到了循環(huán)的尾部。下面是 do-while 的語法:
do
action
while (condition)
在 do-while 循環(huán)中,無論條件是真是假,循環(huán)語句至少執(zhí)行一次,執(zhí)行后檢查條件真假。下面是使用 do-While 循環(huán)輸出數(shù)字 1 到 5 的例子:
[jerry]$ awk 'BEGIN {i = 1; do { print i; ++i } while (i < 6) }'
執(zhí)行上面的命令可以得到如下的結果:
1
2
3
4
5
顧名思義,break 用以結束循環(huán)過程。在下面的示例子中,當計算的和大于 50 的時候使用 break 結束循環(huán)過程:
[jerry]$ awk 'BEGIN {
sum = 0; for (i = 0; i < 20; ++i) {
sum += i; if (sum > 50) break; else print "Sum =", sum
}
}'
執(zhí)行上面的命令可以得到如下的結果:
Sum = 0
Sum = 1
Sum = 3
Sum = 6
Sum = 10
Sum = 15
Sum = 21
Sum = 28
Sum = 36
Sum = 45
Continue 語句用于在循環(huán)體內部結束本次循環(huán),從而直接進入下一次循環(huán)迭代。當我們希望跳過循環(huán)中某處數(shù)據(jù)處理時就會用到 Continue。下面的例子輸出 1 到 20 之間的偶數(shù):
[jerry]$ awk 'BEGIN {for (i = 1; i <= 20; ++i) {if (i % 2 == 0) print i ; else continue} }'
執(zhí)行上面的命令可以得到如下的結果:
2
4
6
8
10
12
14
16
18
20
Exit 用于結束腳本程序的執(zhí)行。該函數(shù)接受一個整數(shù)作為參數(shù)表示 AWK 進程結束狀態(tài)。 如果沒有提供該參數(shù),其默認狀態(tài)為 0 。下面例子中當和大于 50 時結束 AWK 程序。
[jerry]$ awk 'BEGIN {
sum = 0; for (i = 0; i < 20; ++i) {
sum += i; if (sum > 50) exit(10); else print "Sum =", sum
}
}'
執(zhí)行上面的命令可以得到如下的結果:
Sum = 0
Sum = 1
Sum = 3
Sum = 6
Sum = 10
Sum = 15
Sum = 21
Sum = 28
Sum = 36
Sum = 45
讓我們檢查一下腳本執(zhí)行后的返回狀態(tài):
[jerry]$ echo $?
執(zhí)行上面的命令可以得到如下的結果:
19
更多建議: