天天看点

awk学习笔记(10) - 数组

awk中的数组

awk中的数组跟php中的很像,使用前都不需要声明,都可以用字符串做下标。

我们创建一个reg.dat文件来记录用户选修的课程:

Mary O.S. Arch. Discrete Steve D.S. Algorithm Arch. 

Wang Discrete Graphics O.S. Lisa Graphics A.I. 

Lily Discrete Algorithm 

现在要统计各课程被选的次数,亲,怎么办?

之前的程序都是用命令行完成的,从这一篇开始,我们学习将程序写在文件中来调用。

调用的方式是:

awk -f awk程序文件 数据文件 

下面创建一个course.awk文件,在里面编写如下的程序:

{for(i=2;i<=NF;i++) Number[$i]++} 

END {for(course in Number) printf("%10s %d\n", course, Number[course])} 

然后在命令行中调用:

awk -f course.awk reg.dat 

输出结果:

 Discrete 3 

     D.S. 1 

     O.S. 2 

    Steve 1 

     A.I. 1 

     Lisa 1 

 Graphics 2 

    Arch. 2 

Algorithm 2 

解释一下course.awk中的程序:

第一行是一个for循环,NF是一行的字段数,Number是一个数组,$i从第2列开始,直到一行最后一列,其实就是循环了一行的所有的课程,我们将课程名作为数组的下标,一旦有重复的课程,就会将Number[$i]加1。

第二行中的END表示的是在文件处理结束后进行的处理。这一行也有一个for循环,它是用于将Number数组格式化输出,for(course in Number)会逐个读取Number中的元素,读取的下标即course,值为Number[course]。printf完成下标与值的格式化输出。

本文转自 ustb80 51CTO博客,原文链接:http://blog.51cto.com/ustb80/1034692,如需转载请自行联系原作者