例:下面的程序将使用system嵌入函数打印用户编制好的报表文件,这个文件存放在名为myreport.txt的文件中。为简约起见,我们只列出了其end部分:
.
.
.
end {close("myreport.txt");system("lp myreport.txt");}
在这个示例中,我们首先使用close语句关闭了文件myreport.txt文件,然后使用system嵌入函数将myreport.txt送入打印机打印。
写到这里,我不得不跟朋友们说再见了,实在地说,这些内容仍然是awk的初步知识,电脑永远是前进的科学,awk也不例外,本篇所能做的只是在你前行的漫漫长途中铺平一段小小开端,剩下的路还得靠你自己去走。老实说,如果本文真能给你前行的路上带来些许的方便,那本人就知足了!
如对本篇有任何疑问,请e-mail to:chizlong@yeah.net或到主页http://chizling.yeah.net中留言。
附录:
1.awk的常规表达式元字符
\ 换码序列
^ 在字符串的开头开始匹配
$ 在字符串的结尾开始匹配
. 与任何单个字符串匹配
[abc] 与[]内的任一字符匹配
[a-ca-c] 与a-c及a-c范围内的字符匹配(按字母表顺序)
[^abc] 与除[]内的所有字符以外的任一字符匹配
desk|chair 与desk和chair中的任一个匹配
[abc][def] 关联。与a、b、c中的任一字符匹配,且其后要跟d、e、f中的任一个字符。
* 与a、b或c中任一个出现0次或多次的字符相匹配
+ 与a、b或c中任何一个出现1次或多次的字符相匹配
? 与一个空串或a、b或c在任何一个字符相匹配
(blue|black)berry 合并常规表达式,与blueberry或blackberry相匹配
2.awk算术运算符
运算符 用途
------------------
x^y x的y次幂
x**y 同上
x%y 计算x/y的余数(求模)
x+y x加y
x-y x减y
x*y x乘y
x/y x除y
-y 负y(y的开关符号);也称一目减
++y y加1后使用y(前置加)
y++ 使用y值后加1(后缀加)
--y y减1后使用y(前置减)
y-- 使用后y减1(后缀减)
x=y 将y的值赋给x
x+=y 将x+y的值赋给x
x-=y 将x-y的值赋给x
x*=y 将x*y的值赋给x
x/=y 将x/y的值赋给x
x^=y 将x^y的值赋给x
x**=y 将x**y的值赋给x
3.awk允许的测试:
操作符 含义
x==y x等于y
x!=y x不等于y
x>y x大于y
x>=y x大于或等于y
x<y x小于y
x<=y x小于或等于y?
x~re x匹配正则表达式re?
x!~re x不匹配正则表达式re?
4.awk的操作符(按优先级升序排列)
= 、+=、 -=、 *= 、/= 、 %=
||
&&
> >= < <= == != ~ !~
xy (字符串连结,'x''y'变成"xy")
+ -
* / %
++ --
5.awk内置变量(预定义变量)
说明:表中v项表示第一个支持变量的工具(下同):a=awk,n=nawk,p=posix awk,g=gawk
v 变量 含义 缺省值
--------------------------------------------------------
n argc 命令行参数个数
g argind 当前被处理文件的argv标志符
n argv 命令行参数数组
g convfmt 数字转换格式 %.6g
p environ unix环境变量
n errno unix系统错误消息
g fieldwidths 输入字段宽度的空白分隔字符串
a filename 当前输入文件的名字
p fnr 当前记录数
a fs 输入字段分隔符 空格
g ignorecase 控制大小写敏感0(大小写敏感)
a nf 当前记录中的字段个数
a nr 已经读出的记录数
a ofmt 数字的输出格式 %.6g
a ofs 输出字段分隔符 空格
a ors 输出的记录分隔符 新行
a rs 输入的记录他隔符 新行
n rstart 被匹配函数匹配的字符串首
n rlength 被匹配函数匹配的字符串长度
n subsep 下标分隔符 "\034"
6.awk的内置函数
v 函数 用途或返回值
------------------------------------------------
n gsub(reg,string,target) 每次常规表达式reg匹配时替换target中的string
n index(search,string) 返回string中search串的位置
a length(string) 求串string中的字符个数
n match(string,reg) 返回常规表达式reg匹配的string中的位置
n printf(format,variable) 格式化输出,按format提供的格式输出变量variable。
n split(string,store,delim) 根据分界符delim,分解string为store的数组元素
n sprintf(format,variable) 返回一个包含基于format的格式化数据,variables是要放到串中的数据
g strftime(format,timestamp) 返回一个基于format的日期或者时间串,timestmp是systime()函数返回的时间
n sub(reg,string,target) 第一次当常规表达式reg匹配,替换target串中的字符串
a substr(string,position,len) 返回一个以position开始len个字符的子串
p totower(string) 返回string中对应的小写字符
p toupper(string) 返回string中对应的大写字符
a atan(x,y) x的余切(弧度)
n cos(x) x的余弦(弧度)
a exp(x) e的x幂
a int(x) x的整数部分
a log(x) x的自然对数值
n rand() 0-1之间的随机数
n sin(x) x的正弦(弧度)
a sqrt(x) x的平方根
a srand(x) 初始化随机数发生器。如果忽略x,则使用system()
g system() 返回自1970年1月1日以来经过的时间(按秒计算)
参考资料
1、《精通unix》(《understanding unix》[美]stan kelly-bootle 著 李永峰等译 电子工业出版社)
2、《unix使用指南》(第2版) (using unix(second edition)steve moritsugu等原著 张拥军、韩柯、原小玲等译 电子工业出版社出版、发行)
3、unix 联机手册:sco opensrever 5.05版.