日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

通用線程:Awk 實例( 六 )


do...while 示例
{ count=1 do { print "I get printed at least once no matter what" } while ( count != 1 )}
與一般的 while 循環(huán)不同,由于在代碼塊之后對條件求值,"do...while" 循環(huán)永遠都至少執(zhí)行一次 。換句話說,當?shù)谝淮斡龅狡胀?while 循環(huán)時,如果條件為假,將永遠不執(zhí)行該循環(huán) 。
for 循環(huán)
awk 允許創(chuàng)建 for 循環(huán),它就象 while 循環(huán),也等同于 C 語言的 for 循環(huán):
for ( initial assignment; comparison; increment ) { code block}
以下是一個簡短示例:
for ( x = 1; x <= 4; x) { print "iteration",x}
此段代碼將打印:
iteration 1iteration 2iteration 3iteration 4
break 和 continue
此外,如同 C 語言一樣,awk 提供了 break 和 continue 語句 。使用這些語句可以更好地控制 awk 的循環(huán)結構 。以下是迫切需要 break 語句的代碼片斷:
while 死循環(huán)
while (1) { print "forever and ever..."}
因為 1 永遠代表是真,這個 while 循環(huán)將永遠運行下去 。以下是一個只執(zhí)行十次的循環(huán):
break 語句示例
x=1while(1) { print "iteration",x if ( x == 10 ) { break } x}
這里,break 語句用于“逃出”最深層的循環(huán) 。"break" 使循環(huán)立即終止,并繼續(xù)執(zhí)行循環(huán)代碼塊后面的語句 。
continue 語句補充了 break,其作用如下:
x=1while (1) { if ( x == 4 ) { xcontinue } print "iteration",x if ( x > 20 ) { break } x}
這段代碼打印 "iteration 1" 到 "iteration 21","iteration 4" 除外 。如果迭代等于 4,則增加 x 并調(diào)用 continue 語句,該語句立即使 awk 開始執(zhí)行下一個循環(huán)迭代,而不執(zhí)行代碼塊的其余部分 。如同 break 一樣,continue 語句適合各種 awk 迭代循環(huán) 。在 for 循環(huán)主體中使用時,continue 將使循環(huán)控制變量自動增加 。以下是一個等價循環(huán):
for ( x=1; x<=21; x) { if ( x == 4 ) { continue } print "iteration",x}
在 while 循環(huán)中時,在調(diào)用 continue 之前沒有必要增加 x,因為 for 循環(huán)會自動增加 x 。
數(shù)組
如果您知道 awk 可以使用數(shù)組,您一定會感到高興 。然而,在 awk 中,數(shù)組下標通常從 1 開始,而不是 0:
myarray[1]="jim"myarray[2]=456
awk 遇到第一個賦值語句時,它將創(chuàng)建 myarray,并將元素 myarray[1] 設置成 "jim" 。執(zhí)行了第二個賦值語句后,數(shù)組就有兩個元素了 。
數(shù)組迭代
定義之后,awk 有一個便利的機制來迭代數(shù)組元素,如下所示:
for ( x in myarray ) { print myarray[x]}
這段代碼將打印數(shù)組 myarray 中的每一個元素 。當對于 for 使用這種特殊的 "in" 形式時,awk 將 myarray 的每個現(xiàn)有下標依次賦值給 x(循環(huán)控制變量),每次賦值以后都循環(huán)一次循環(huán)代碼 。雖然這是一個非常方便的 awk 功能,但它有一個缺點 -- 當 awk 在數(shù)組下標之間輪轉(zhuǎn)時,它不會依照任何特定的順序 。那就意味著我們不能知道以上代碼的輸出是
jim456
還是
456jim
套用 Forrest Gump 的話來說,迭代數(shù)組內(nèi)容就像一盒巧克力 -- 您永遠不知道將會得到什么 。因此有必要使 awk 數(shù)組“字符串化”,我們現(xiàn)在就來研究這個問題 。
數(shù)組下標字符串化
在我的前一篇文章中,我演示了 awk 實際上以字符串格式來存儲數(shù)字值 。雖然 awk 要執(zhí)行必要的轉(zhuǎn)換來完成這項工作,但它卻可以使用某些看起來很奇怪的代碼:
a="1"b="2"c=a b 3
執(zhí)行了這段代碼后,c 等于 6 。由于 awk 是“字符串化”的,添加字符串 "1" 和 "2" 在功能上并不比添加數(shù)字 1 和 2 難 。這兩種情況下,awk 都可以成功執(zhí)行運算 。awk 的“字符串化”性質(zhì)非??蓯?-- 您可能想要知道如果使用數(shù)組的字符串下標會發(fā)生什么情況 。例如,使用以下代碼:
myarr["1"]="Mr. Whipple"print myarr["1"]
可以預料,這段代碼將打印 "Mr. Whipple" 。但如果去掉第二個 "1" 下標中的引號,情況又會怎樣呢?

推薦閱讀