由于最近要对一些文本数据进行处理,而又听说脚本编程会较C编程要方便一些,于是开始了与gawk的亲密接触.
之前,对gawk我可是闻所未闻,只是买的一本入门书中恰好有关于gawk的介绍,而其中又恰好有满足我需求的功能.
原本以为脚本编程既然方便,那他一定是比较接近自然语言的.可是谁知道为了实现小小的功能,确花去了我一天的时
间.如果早就选择c语言的话,估计早就完成了.不过还是自己安慰自己,毕竟新学了一些东西.
其实学过一种高级编程语言之后,学习gawk还是比较方便容易的.但是一直要牢记一点,就是gawk中的所有操作都是
针对行的,其中的每一条命令都顺序对一行执行操作之后,才开始处理下一行.不过在gawk脚本中有两段特殊的部分,
BEGIN和END.在BEGIN部分的语句要在待处理的文件打开之前执行,而END中的操作则是在到达文件结尾的时候才
可以执行.所以所有的初始化操作都将放在BEGIN部分,而所有的首尾工作都将在END部分执行.同样的针对行操作的
各种命令是不能出现在BEGIN和END部分的.
下面是针对gawk的一些基本语法.
gawk命令包涵三个部分,(1)gawk (2)/模式/{操作} (3)待处理的文件(可以有多个输入文件)
其中模式部分和大部分的命令行正则表达是相同,它通过模式选定文件中相匹配的行,并对改行执行后面相应的操作.
当需要处理多个文件时,则顺序处理各个文件,即处理完第一个文件后,对下一个文件执行相同的操作.
1.变量
与C语言不同,在gawk中无需对变量进行声明,当然也无需进行显示的初始化,要使用一个变量时直接在命令行应用即
可.系统默认赋给变量的初值是零.
例如: gawk '/ab/{ i= $1}' test
运行命令无错,没有输出结果.这里的"i"就是未经声明既使用的变量.当然也可以是
gawk ' /ab/{print i}' test
此时的打印结果是ab所在的整个行
(注意:在命令行使用gawk命令,要把模式和操作部分用单引号括起来)