AWK编程(一)

本文介绍了AWK编程的基础知识,包括编程模型,它由主输入循环构成,BEGIN和END用于在循环前后执行特定操作。文章还讲解了三种调用awk的方法,并着重阐述了awk的模式匹配、记录与域的概念,如如何使用$操作符选择域,以及如何通过-F或FS改变域分隔符。
摘要由CSDN通过智能技术生成

1. AWK编程模型

awk程序是由一个主输入循环(main input loop)维持,主输入循环反复执行,直到终止条件被触发。awk已经搭建好了主输入循环框架,我们写的代码被嵌到主输入循环框架中执行。主输入循环依次自动读取输入文件行,以供处理,而处理的文件执行的动作是由我们自己添加的。


awk 还定义了两个特使的字段:BEGIN和END,BEGIN主要用于在主输入循环之前执行,即在未读取输入文件行之前执行,END则相反,用于在主输入循环之后执行,即在读取输入文件完毕之后执行。


2. awk调用方法

有如下的三种调用awk的方法:

(1). 在shell命令行中输入命令执行: awk [-F 域分隔符]  `awk程序段` 输入文件

(2). awk插入到脚本中,然后调用脚本进行执行

awk -f awk脚本文件 输入文件

(3). 将awk插入到脚本文件中,直接执行

./awk脚本文件   输入文件


3.  常用的awk编程

1. awk模式匹配

任何awk语句都是由模式(pattern)和动作(action)组成。模式是一组用于测试输入行是否需要执行动作的规则,动作是包含语句、函数和表达式的执行过程。

注意其中的命令部分是单引号; 以/分隔符号;^$ 是正则表达式,表示空白行。print表示该动作是打印操作。

以上的命令表示  读取输入文件input.txt 若里面的一行是空白行,则打印 This is a blank line.

2. awk中的记录和域

awk 认为输入文件是结构化的,awk将每个输入文件行定义为记录,行中的每个字符串定义为域,域之间用空格、Tab键或其它分隔符号进行分隔,分隔域的符号叫分隔符。例如:

Zhang  San 021-8888666

awk定义域操作符$ 来指定执行动作的域,域操作符$后面跟数字或变量来标识域的位置,每条记录的域从1开始编号,例如: $1 表示第1个域、$2表示第2个域,$0表示所有的域。例如:

studentrecord.txt 中存放 三个学生的姓名以及电话号码,姓和名字之间只有一个空格;名和电话之间是一个Tab键。 只打印第一个域。若打印全部可以$0

kenvindeMacBook-Air:$ awk '{print $0}' studentrecord.txt 

Zhang San 66661111

Li Si 8888222

Wang Wu 9999655

操作符$之后也可以跟变量,或者变量的表达式。例如:

其中BEGIN字段中的语句是在遍历输入文件之前执行的。 打印第3个域的值。


也可以使用-F选项改变分隔符例如: -f 参数则表示调用的awk脚本。

上面默认分隔符是空格时电话的域是第3个,若使用-F的分隔符则电话的域则变成了第2个域。

也可以通过更改awk的环境变量FS来改变分隔符,例如:


可以使用正则表达式将分隔符设置为多个字符,例如:FS="\t"  一个空格  ; FS="\t+" 则表示一个或者多个Tab键作为分隔符。


以上是简单总计几个常用的用法,后续的用法明天再续。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值