awk(一)概述

一 awk程序模型:

(一)awk模式与操作:

(1)awk 'program' [ file ...]

awk读取指定的各个文件(若无则是标准输入),一次读取一条记录(行),再针对每一行,应用程序指定的命令。


(2)awk中程序(program)的基本架构为:

BEGIN { 起始操作程序代码 }

pattern { action }

pattern { action }

...

END { 清楚操作程序代码 }


(3)pattern几乎可以是任何表达式(格式/regexp/)。action为任意的awk语句,但在单命令行程序里,通常是一个直接明了的print语句。

pattern或action都能省略。省略pattern,则会对每一条输入记录执行action,省略action等同于{ print },将打印整条记录。

一个awk程序是一对以模式(pattern)与大括号框起来的操作(action)组合而成的。针对每个匹配于输入数据的模式,操作会被执行,且所有模式都会针对每条输入记录而检查。


(4)awk以保留字BEGIN与END提供两种特殊模式(这两个语句块是可选的,如果设置习惯上应分别置于awk程序的开头与结尾处):

BEGIN关联的操作只会执行一次,在任何命令行文件或一般命令行赋值被处理之前。大部分是用来处理程序所需要的任何特殊初始化工作。

END操作也是只执行一次,用于所有输入数据已被处理完之后。它多半用于产生摘要报告,或是执行清除操作。



(5)总结:对于每条记录,awk会测试程序里的每个pattern。若模式为真,则awk会执行action内的程序代码。


(6)例如:

*awk -F ":" '$0~/root/ {print $1} $0~/lyr/{print $0}' /etc/passwd

*awk -F ":" -f pattern.awk /etc/passwd 

~pattern.awk的内容:$0~/root/ {print $1} $0~/lyr/{print $0}。

*awk 'BEGIN{for(k=0;k<ARGC;++k) print "ARGV[" k "]=" ARGV[k]}' file

~打印命令行参数。


(二)awk执行过程:

*awk把输入流看作一连串记录的集合,每条记录都可进一步细分为字段。通常,一行一条记录,而字段则由一个或多个非空白字符的单词组成。

*awk读取输入记录(通常是一些行),然后自动将各个记录切分为字段,awk将每条记录内的字段数目,存储到内建变量NF。

*输入会自动地由一个输入文件切换到下一个,且awk本身通常会处理每个输入文件的打开、读取与关闭,以允许用户程序专心致力于记录的处理。


二 awk中程序元素:

(1)内建变量:

FNR:当前输入文件的记录数.

FS:字段分隔符

RS:输入记录分隔字符

OFS:输出字段分隔符

ORS:输出记录分隔字符(默认为"\n")

NF:当前记录的字段数

(2)选项:

*-F value:sets the field separator,FS,to value. 例如:sed -F ':' '{print $i}' file

*-v var=value:assigns value to program variable var.

例如:awk的输入、输出分割字符用法是分开的,必须设置OFS变量设置才能改变输出字段分割字符。方法是:-v 'OFS=:'。也可以在BEGIN模块中设置FS和OFS。如:awk 'BEGIN{FS=":";OFS="*"} {print $1 $2}' /etc/passwd

*-f:指定program的文件。短的program通常直接在命令行上提供,而比较长的程序则写入文件,利用-f选项指定。


三 使用例子:

(1)统计数据:

awk -F: ‘{var+=$2} END{print var}’.





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值