標籤:blog 使用 for ar 代碼 html log on new
【著作權聲明:轉載請保留出處:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】
與上一節printf一樣,awk的迴圈判斷和C語言的迴圈判斷文法極其類似。
1、 While迴圈
#!/bin/sh awk 'BEGIN { ORS=""}{ i=0 while (i < NF) { printf("* ") i++ } print "\n"}' group_file1
首先,將輸出記錄分隔字元 ORS 設定成 ""(空),它將使 print 語句在每個調用結尾不輸出新行。這意味著如果希望任何文本從新的一行開始,那麼需要明確寫入 print "\n"。
在代碼中,設定變數i來儲存當前中處理欄位編號,對每一行記錄,i首先設定為0,然後對每一欄位列印一個“*”,每一行記錄列印完之後列印一個換行,由於將 ORS 設定成 "",print將不輸出2個換行。下面為列印結果:
#./7_awk_while.sh* * * * * * * * * * * * * * * * #
2、 do…while迴圈
awk 還有"do...while" 迴圈,它在代碼塊結尾處對條件求值,而不象標準 while 迴圈那樣在開始處求值。
樣本(輸出六個*號):
#!/bin/sh echo "" | awk '{ i=0 do { printf("* ") }while (i++ < 5) printf("\n")}'
與一般的 while 迴圈不同,由於在代碼塊之後對條件求值,"do...while" 迴圈永遠都至少執行一次。
換句話說,當第一次遇到普通 while 迴圈時,如果條件為假,將永遠不執行該迴圈。
3、 for迴圈
awk 允許建立 for 迴圈,它就象 while 迴圈,也等同於 C 語言的 for 迴圈:
for ( initial assignment; comparison; increment ) { code block}
樣本(同樣連續輸出5個*):
#!/bin/sh echo"" | awk '{ for (i=0; i<5; i++) { printf("* ") } printf("\n")}'
使用過C語言的會發現,Awk的迴圈操作和C語言的迴圈操作文法極其類似。
Awk也支援數組,數組使用前,不必定義,也不必指定數組元素個數。經常使用迴圈來訪問數組。下面是一種迴圈類型的基本結構:
For (element inarray ) print array[element]
樣本:
#!/bin/sh echo"" | awk 'BEGIN { a[1]="123" a[2]="456" a[3]="789"} END{ for(i in a) { print a[i] }}'
Awk數組的下標還可以使用字串。awk 將 arr["1"] 和 arr[1] 看作同一個元素。
樣本:
#!/bin/sh echo"" | awk 'BEGIN { a[1]="123" a[2]="456" a[3]="789" a["hello"]="awk" a["3"]="world"} { for(i in a) { print a[i] }} END { print "======end========" print a[3] print a["3"]}'
輸出結果為:
awk123456world======end========worldworld
shell文本過濾編程(六):awk之迴圈判斷及數組