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

通用線程:Awk 實例( 七 )


myarr["1"]="Mr. Whipple"print myarr[1]
猜想這個代碼片斷的結(jié)果比較難 。awk 將 myarr["1"] 和 myarr[1] 看作數(shù)組的兩個獨立元素,還是它們是指同一個元素?答案是它們指的是同一個元素,awk 將打印 "Mr. Whipple",如同第一個代碼片斷一樣 。雖然看上去可能有點怪,但 awk 在幕后卻一直使用數(shù)組的字符串下標(biāo)!
了解了這個奇怪的真相之后,我們中的一些人可能想要執(zhí)行類似于以下的古怪代碼:
myarr["name"]="Mr. Whipple"print myarr["name"]
這段代碼不僅不會產(chǎn)生錯誤,而且它的功能與前面的示例完全相同,也將打印 "Mr. Whipple"!可以看到,awk 并沒有限制我們使用純整數(shù)下標(biāo);如果我們愿意,可以使用字符串下標(biāo),而且不會產(chǎn)生任何問題 。只要我們使用非整數(shù)數(shù)組下標(biāo),如 myarr["name"],那么我們就在使用關(guān)聯(lián)數(shù)組 。從技術(shù)上講,如果我們使用字符串下標(biāo),awk 的后臺操作并沒有什么不同(因為即便使用“整數(shù)”下標(biāo),awk 還是會將它看作是字符串) 。但是,應(yīng)該將它們稱作關(guān)聯(lián)數(shù)組 -- 它聽起來很酷,而且會給您的上司留下印象 。字符串化下標(biāo)是我們的小秘密 。;)
數(shù)組工具
談到數(shù)組時,awk 給予我們許多靈活性 ??梢允褂米址聵?biāo),而且不需要連續(xù)的數(shù)字序列下標(biāo)(例如,可以定義 myarr[1] 和 myarr[1000],但不定義其它所有元素) 。雖然這些都很有用,但在某些情況下,會產(chǎn)生混淆 。幸好,awk 提供了一些實用功能有助于使數(shù)組變得更易于管理 。
首先,可以刪除數(shù)組元素 。如果想要刪除數(shù)組 fooarray 的元素 1,輸入:
delete fooarray[1]
而且,如果想要查看是否存在某個特定數(shù)組元素,可以使用特殊的 "in" 布爾運算符,如下所示:
if ( 1 in fooarray ) { print "Ayep! It"s there."} else { print "Nope! Can"t find it."}
下一篇
本文中,我們已經(jīng)討論了許多基礎(chǔ)知識 。下一篇中,我將演示如何使用 awk 的數(shù)學(xué)運算和字符串函數(shù),以及如何創(chuàng)建您自己的函數(shù),使您完全掌握 awk 知識 。我還將指導(dǎo)您創(chuàng)建支票簿結(jié)算程序 。那時,我會鼓勵您編寫自己的 awk 程序 。請查閱以下參考資料 。
在 awk 系列的這篇總結(jié)中,Daniel 向您介紹 awk 重要的字符串函數(shù),以及演示了如何從頭開始編寫完整的支票簿結(jié)算程序 。在這個過程中,您將學(xué)習(xí)如何編寫自己的函數(shù),并使用 awk 的多維數(shù)組 。學(xué)完本文之后,您將掌握更多 awk 經(jīng)驗,可以讓您創(chuàng)建功能更強(qiáng)大的腳本 。
第三部分
格式化輸出
雖然大多數(shù)情況下 awk 的 print 語句可以完成任務(wù),但有時我們還需要更多 。在那些情況下,awk 提供了兩個我們熟知的老朋友 printf() 和 sprintf() 。是的,如同其它許多 awk 部件一樣,這些函數(shù)等同于相應(yīng)的 C 語言函數(shù) 。printf() 會將格式化字符串打印到 stdout,而 sprintf() 則返回可以賦值給變量的格式化字符串 。如果不熟悉 printf() 和 sprintf(),介紹 C 語言的文章可以讓您迅速了解這兩個基本打印函數(shù) 。在 Linux 系統(tǒng)上,可以輸入 "man 3 printf" 來查看 printf() 幫助頁面 。
以下是一些 awk sprintf() 和 printf() 的樣本代碼 ??梢钥吹?,它們幾乎與 C 語言完全相同 。
x=1b="foo"printf("%s got a %d on the last testn","Jim",83)myout=("%s-%d",b,x)print myout
此代碼將打?。?
Jim got a 83 on the last testfoo-1
字符串函數(shù)
awk 有許多字符串函數(shù),這是件好事 。在 awk 中,確實需要字符串函數(shù),因為不能象在其它語言(如 C、C和 Python)中那樣將字符串看作是字符數(shù)組 。例如,如果執(zhí)行以下代碼:
mystring="How are you doing today?"print mystring[3]
將會接收到一個錯誤,如下所示:
awk: string.gawk:59: fatal: attempt to use scalar as array
噢,好吧 。雖然不象 Python 的序列類型那樣方便,但 awk 的字符串函數(shù)還是可以完成任務(wù) 。讓我們來看一下 。

推薦閱讀