首先,有一个基本 length() 函数,它返回字符串的长度 。以下是它的使用方法:
print length(mystring)
此代码将打印值:
24
好,继续 。下一个字符串函数叫作 index,它将返回子字符串在另一个字符串中出现的位置,如果没有找到该字符串则返回 0 。使用 mystring,可以按以下方法调用它:
print index(mystring,"you")
awk 会打印:
9
让我们继续讨论另外两个简单的函数,tolower() 和 toupper() 。与您猜想的一样,这两个函数将返回字符串并且将所有字符分别转换成小写或大写 。请注意,tolower() 和 toupper() 返回新的字符串,不会修改原来的字符串 。这段代码:
print tolower(mystring)print toupper(mystring)print mystring
……将产生以下输出:
how are you doing today?HOW ARE YOU DOING TODAY?How are you doing today?
到现在为止一切不错,但我们究竟如何从字符串中选择子串,甚至单个字符?那就是使用 substr() 的原因 。以下是 substr() 的调用方法:
mysub=substr(mystring,startpos,maxlen)
mystring 应该是要从中抽取子串的字符串变量或文字字符串 。startpos 应该设置成起始字符位置,maxlen 应该包含要抽取的字符串的最大长度 。请注意,我说的是最大长度;如果 length(mystring) 比 startpos maxlen 短,那么得到的结果就会被截断 。substr() 不会修改原始字符串,而是返回子串 。以下是一个示例:
print substr(mystring,9,3)
awk 将打印:
you
如果您通常用于编程的语言使用数组下标访问部分字符串(以及不使用这种语言的人),请记住 substr() 是 awk 代替方法 。需要使用它来抽取单个字符和子串;因为 awk 是基于字符串的语言,所以会经常用到它 。
现在,我们讨论一些更耐人寻味的函数,首先是 match() 。match() 与 index() 非常相似,它与 index() 的区别在于它并不搜索子串,它搜索的是规则表达式 。match() 函数将返回匹配的起始位置,如果没有找到匹配,则返回 0 。此外,match() 还将设置两个变量,叫作 RSTART 和 RLENGTH 。RSTART 包含返回值(第一个匹配的位置),RLENGTH 指定它占据的字符跨度(如果没有找到匹配,则返回 -1) 。通过使用 RSTART、RLENGTH、substr() 和一个小循环,可以轻松地迭代字符串中的每个匹配 。以下是一个 match() 调用示例:
print match(mystring,/you/), RSTART, RLENGTH
awk 将打印:
9 9 3
字符串替换
现在,我们将研究两个字符串替换函数,sub() 和 gsub() 。这些函数与目前已经讨论过的函数略有不同,因为它们确实修改原始字符串 。以下是一个模板,显示了如何调用 sub():
sub(regexp,replstring,mystring)
调用 sub() 时,它将在 mystring 中匹配 regexp 的第一个字符序列,并且用 replstring 替换该序列 。sub() 和 gsub() 用相同的自变量;唯一的区别是 sub() 将替换第一个 regexp 匹配(如果有的话),gsub() 将执行全局替换,换出字符串中的所有匹配 。以下是一个 sub() 和 gsub() 调用示例:
sub(/o/,"O",mystring)print mystringmystring="How are you doing today?"gsub(/o/,"O",mystring)print mystring
必须将 mystring 复位成其初始值,因为第一个 sub() 调用直接修改了 mystring 。在执行时,此代码将使 awk 输出:
HOw are you doing today?HOw are yOu dOing tOday?
当然,也可以是更复杂的规则表达式 。我把测试一些复杂规则表达式的任务留给您来完成 。
通过介绍函数 split(),我们来汇总一下已讨论过的函数 。split() 的任务是“切开”字符串,并将各部分放到使用整数下标的数组中 。以下是一个 split() 调用示例:
numelements=split("Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",mymonths,",")
调用 split() 时,第一个自变量包含要切开文字字符串或字符串变量 。在第二个自变量中,应该指定 split() 将填入片段部分的数组名称 。在第三个元素中,指定用于切开字符串的分隔符 。split() 返回时,它将返回分割的字符串元素的数量 。split() 将每一个片段赋值给下标从 1 开始的数组,因此以下代码:
推荐阅读
- 通用线程--sed 实例,第3部分
- 通用线程--sed 实例,第1部分
- 通用线程--sed 实例,第2部分
- FreeBSD下设置modem和modem的通用命令
- 什么叫多线程
- 和彩云支持普通用户上传多大文件
- 缝好衣服后怎么用短线快速打结?男女通用
- 医保是全国通用的吗
- 5e和steam皮肤通用吗
- 下 Solaris 10通用桌面CDE快速入门
