daniel robbins 【程序编程相关:系统调用的实现及调用过程】
【推荐阅读:关于Raid-10】总裁兼 ceo, gentoo technologies, inc. 【扩展信息:学习嵌入式Linux的笔记和体会】 2001 年 4 月 在这篇 awk 系列的总结中,daniel 向您介绍 awk 重要的字符串函数,以及演示了如何从头开始编写完整的支票簿结算程序.在这个过程中,您将学习如何编写自己的函数,并使用 awk 的多维数组.学完本文之后,您将掌握更多 awk 经验,可以让您创建功能更强大的脚本.格式化输出
虽然大多数情况下 awk 的 print 语句可以完成任务,但有时我们还需要更多.在那些情况下,awk 提供了两个我们熟知的老朋友 printf() 与 sprintf().是的,如同其它许多 awk 部件一样,这些函数等同于相应的 c 语言函数.printf() 会将格式化字符串打印到 stdout,而 sprintf() 则返回可以赋值给变量的格式化字符串.如果不熟悉 printf() 与 sprintf(),介绍 c 语言的文章可以让您迅速了解这两个基本打印函数.在 linux 系统上,可以输入 "man 3 printf" 来查看 printf() 帮助页面.以下是一些 awk sprintf() 与 printf() 的样本代码.可以看到,它们几乎与 c 语言完全相同.
x=1 b="foo" printf("%s got a %d on the last test\n","jim",83) myout=("%s-%d",b,x) print myout此代码将打印:
jim got a 83 on the last test foo-1字符串函数
awk 有许多字符串函数,这是件好事.在 awk 中,确实需要字符串函数,因为不能象在其它语言(如 c.c++ 与 python)中那样将字符串看作是字符数组.例如,如果执行以下代码:mystring="how are you doing today?" print mystring[3]将会接收到一个错误,如下所示:
awk: string.gawk:59: fatal: attempt to use scalar as array噢,好吧.虽然不象 python 的序列类型那样方便,但 awk 的字符串函数还是可以完成任务.让我们来看一下.
首先,有一个基本 length() 函数,它返回字符串的长度.以下是它的使用方法:
print length(mystring)此代码将打印值:
24好,继续.下一个字符串函数叫作 index,它将返回子字符串在另一个字符串中出现的位置,如果没有找到该字符串则返回 0.使用 mystring,可以按以下方法调用它:
print index(mystring,"you")awk 会打印:
9让我们继续讨论另外两个简单的函数,tolower() 与 toupper().与您猜想的一样,这两个函数将返回字符串并且将所有字符分别转换成小写或大写.请注意,tolower() 与 toupper() 返回新的字符串,不会修改原来的字符串.这段代码:
... 下一页