awk编程混淆点

上一篇 / 下一篇  2011-01-06 11:46:24 / 个人分类:linux&shell编程

每次在用AWK进行循环类的编程过程中,总是对BEGIN和END这两个模块引起混淆。现整理一下,以供自阅。

BEGIN模式
   BEGIN模式后面跟一个操作模块,在awk处理文件之前执行该模块。BEGIN模式主要用来设置OFS、RS、FS等内置变量的值。
employees文件夹内容如下:
Tom Jones 4423 5/12/66
Mary Adams 5346 11/4/63
Sally Chang 1654 7/22/54
Mary Black 1683 9/23/44


$ awk 'BEGIN{FS=":";OFS="\t";ORS="\n\n"}{print $1,$2,$3}' employees

解释:在处理输入文件之前,把域分隔符置成一个冒号,输出域分隔符制成跳格符,并把输出记录分隔符(ORS)设置成两个换行符。

END模式
END模式不与任何输入行相匹配,但是执行任何与END模式相关的操作。在所有行处理完毕之后再来处理END模式。
$ awk '/Mary/{count++}END{print "Mary was found " count " times."}' employees
Mary was found 2 times.

$ awk '/Mary/{count++;print $0}END{print "Mary was found " count " times."}' employees
Mary Adams 5346 11/4/63
Mary Black 1683 9/23/44
Mary was found 2 times.
解释:对于包含Mary的每一行,count变量值都递增1。awk 处理完毕之后,END模块打印结果。

TAG:

 

评分:0

我来说两句

Open Toolbar