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

通用線程:Awk 實(shí)例( 八 )


首先,有一個基本 length() 函數(shù),它返回字符串的長度 。以下是它的使用方法:
print length(mystring)
此代碼將打印值:
24
好,繼續(xù) 。下一個字符串函數(shù)叫作 index,它將返回子字符串在另一個字符串中出現(xiàn)的位置,如果沒有找到該字符串則返回 0 。使用 mystring,可以按以下方法調(diào)用它:
print index(mystring,"you")
awk 會打印:
9
讓我們繼續(xù)討論另外兩個簡單的函數(shù),tolower() 和 toupper() 。與您猜想的一樣,這兩個函數(shù)將返回字符串并且將所有字符分別轉(zhuǎn)換成小寫或大寫 。請注意,tolower() 和 toupper() 返回新的字符串,不會修改原來的字符串 。這段代碼:
print tolower(mystring)print toupper(mystring)print mystring
……將產(chǎn)生以下輸出:
how are you doing today?HOW ARE YOU DOING TODAY?How are you doing today?
到現(xiàn)在為止一切不錯,但我們究竟如何從字符串中選擇子串,甚至單個字符?那就是使用 substr() 的原因 。以下是 substr() 的調(diào)用方法:
mysub=substr(mystring,startpos,maxlen)
mystring 應(yīng)該是要從中抽取子串的字符串變量或文字字符串 。startpos 應(yīng)該設(shè)置成起始字符位置,maxlen 應(yīng)該包含要抽取的字符串的最大長度 。請注意,我說的是最大長度;如果 length(mystring) 比 startpos maxlen 短,那么得到的結(jié)果就會被截?cái)?。substr() 不會修改原始字符串,而是返回子串 。以下是一個示例:
print substr(mystring,9,3)
awk 將打?。?
you
如果您通常用于編程的語言使用數(shù)組下標(biāo)訪問部分字符串(以及不使用這種語言的人),請記住 substr() 是 awk 代替方法 。需要使用它來抽取單個字符和子串;因?yàn)?awk 是基于字符串的語言,所以會經(jīng)常用到它 。
現(xiàn)在,我們討論一些更耐人尋味的函數(shù),首先是 match() 。match() 與 index() 非常相似,它與 index() 的區(qū)別在于它并不搜索子串,它搜索的是規(guī)則表達(dá)式 。match() 函數(shù)將返回匹配的起始位置,如果沒有找到匹配,則返回 0 。此外,match() 還將設(shè)置兩個變量,叫作 RSTART 和 RLENGTH 。RSTART 包含返回值(第一個匹配的位置),RLENGTH 指定它占據(jù)的字符跨度(如果沒有找到匹配,則返回 -1) 。通過使用 RSTART、RLENGTH、substr() 和一個小循環(huán),可以輕松地迭代字符串中的每個匹配 。以下是一個 match() 調(diào)用示例:
print match(mystring,/you/), RSTART, RLENGTH
awk 將打印:
9 9 3
字符串替換
現(xiàn)在,我們將研究兩個字符串替換函數(shù),sub() 和 gsub() 。這些函數(shù)與目前已經(jīng)討論過的函數(shù)略有不同,因?yàn)樗鼈兇_實(shí)修改原始字符串 。以下是一個模板,顯示了如何調(diào)用 sub():
sub(regexp,replstring,mystring)
調(diào)用 sub() 時,它將在 mystring 中匹配 regexp 的第一個字符序列,并且用 replstring 替換該序列 。sub() 和 gsub() 用相同的自變量;唯一的區(qū)別是 sub() 將替換第一個 regexp 匹配(如果有的話),gsub() 將執(zhí)行全局替換,換出字符串中的所有匹配 。以下是一個 sub() 和 gsub() 調(diào)用示例:
sub(/o/,"O",mystring)print mystringmystring="How are you doing today?"gsub(/o/,"O",mystring)print mystring
必須將 mystring 復(fù)位成其初始值,因?yàn)榈谝粋€ sub() 調(diào)用直接修改了 mystring 。在執(zhí)行時,此代碼將使 awk 輸出:
HOw are you doing today?HOw are yOu dOing tOday?
當(dāng)然,也可以是更復(fù)雜的規(guī)則表達(dá)式 。我把測試一些復(fù)雜規(guī)則表達(dá)式的任務(wù)留給您來完成 。
通過介紹函數(shù) split(),我們來匯總一下已討論過的函數(shù) 。split() 的任務(wù)是“切開”字符串,并將各部分放到使用整數(shù)下標(biāo)的數(shù)組中 。以下是一個 split() 調(diào)用示例:
numelements=split("Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",mymonths,",")
調(diào)用 split() 時,第一個自變量包含要切開文字字符串或字符串變量 。在第二個自變量中,應(yīng)該指定 split() 將填入片段部分的數(shù)組名稱 。在第三個元素中,指定用于切開字符串的分隔符 。split() 返回時,它將返回分割的字符串元素的數(shù)量 。split() 將每一個片段賦值給下標(biāo)從 1 開始的數(shù)組,因此以下代碼:

推薦閱讀