Chinaunix首页 | 论坛 | 博客
  • 博客访问: 926913
  • 博文数量: 335
  • 博客积分: 10287
  • 博客等级: 上将
  • 技术积分: 3300
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-08 15:29
文章分类

全部博文(335)

文章存档

2015年(4)

2014年(15)

2013年(17)

2012年(11)

2011年(12)

2010年(96)

2009年(27)

2008年(34)

2007年(43)

2006年(39)

2005年(37)

我的朋友

分类: LINUX

2010-03-19 17:24:20

前面一篇文章《awk示例(一)》最后提到本文开始讲解awk中的变量,下面首先来看数值变量。

awk允许我们执行整数和浮点运算。通过使用数学表达式,可以很方便地编写计算文件中空白行数量的脚本。以下就是这样一个脚本(test.awk):

BEGIN { x=0 }

/^$/ { x=x+1 }

END { print "I found " x " blank lines. :)" }

aaa ffsdf

假设test.in内容如下:

     fffh gfg hgfhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhghgf gdfgdfg ggggggggggggggggggg hhhhhhhhhhh

ggggggggggg

则执行 awk -f test.awk test.in后,结果如下:

I found 4 blank lines. :)

BEGIN块中,将整数变量x初始化成零。然后,awk每次遇到空白行时,awk 将执行x=x+1语句,递增x。处理完所有行之后,执行END块,awk将打印出最终摘要,指出它找到的空白行数量。

下面继续看字符串变量,只要变量包含有效数字字符串,awk 会自动处理字符串到数字的转换步骤。例如:

x="1.01"

x=x+1

{print x}

执行上面示例之后awk将输出2.01,可见虽然将字符串值 1.01 赋值给变量 x,我们仍然可以对它加一。同样,假设名为address.in的文件内容如下:

1:abc:male:13612345678

2:mary:female:12345678

3:aaa:female:44445555

4:zlx:female:13550000000

5:lucy:female:13611111111

6:david:male:10101010

则执行awk -F":" '{ print ($1^2)+1 }' address.in后将对每个输入行的第一个字段乘方并加一,结果如下:

2

5

10

17

26

37

若将address.in的最后一行改为end:david:male:10101010,则同样执行上述命令后结果将会变为:

2

5

10

17

26

1

注意上述结果的最后一行是1,从这个例子可以看出如果某个特定变量不包含有效数字,awk 在对数学表达式求值时会将该变量当作数字零处理。

对于运算符,除了标准的加、减、乘、除,awk 还允许使用前面演示过的指数运算符 "^"、模(余数)运算符 "%" 和其它许多从 C 语言中借入的易于使用的赋值操作符,在此不做详细介绍。好了,上面我们简单介绍了awk中用户自定义变量的使用,下篇文章开始讲解awk自己的特殊变量。

 

阅读(409) | 评论(0) | 转发(0) |
0

上一篇:awk示例(一)

下一篇:awk示例(三)

给主人留下些什么吧!~~