AWK是一种用于处理数据和生成报告的UNIX编程语言。 nawk 是awk的新版本。 gawk 是基于linux 的GNU版本。
处理的数据可以来自标准输入,一个或多个文件,也可以来自程序的输出。
awk 以逐行方式扫描文件或输入,从第一行到最后一行,以查找匹配某个特定模式的问本行,并对这些文本行执行指定的动作。
awk 指令有模式,操作,或模式和操作的组合组成。
awk 有awk命令,括在引号中的程序指令,输入文件的文件名组成。
awk 工作原理
以一个名为names的文件为例进行说明
cat names
tom savage 100
molly lee 200
john doe 300
以上为names的内容
执行如下指令:
nawk '{print $1,$3}' names
1.awk 使用一行作为输入,并将这一行付给内部变量$0,默认时每一行也可以称为一个记录,以换行符结束。
tom savage 100
$0
2.然后,行被空格分解成字段(单词),每个字段存储在已编号的变量中,从$1开始,可以多达100个字段
tom savage 100
$1 $2 $3
3. awk 通过内部变量FS用来确定字段分隔符。初始时,FS被赋予为空格---包含制表符和空格符。
如果需要使用其他分隔符,需要将FS变量的值设置新的字段分隔符
4. awk 打印字段时,将以下面的方式使用print 函数
{print $1,$3}
tom 100
molly 200
john 300
awk在tom 和 100 之间加入了空格,因为$1,$3之间存在一个逗号。
逗号被影射为另一个特殊的内部变量,OFS(输出字段分隔符)
OFS默认为空格。
5. awk输出之后,将从文件中获取另一行,并将其存在$0中,覆盖原来的内容,重新分割成字段并进行处理。知道完成所有行。
OFMT 变量
OFMT变量的默认值是 "%.6gd" ,表示只打印小数部分的前6位。
ORS 输出记录分隔符 默认 是回车符
RS 记录分隔符
NF 字段数
FS 字段分隔符 ,awk 使用空格或制表符来分割字段
NR 记录号,每条记录的记录号。
OFS 输出字段分隔符 ,默认是 单个空格
$NF 表示最后一个字段
举例
nawk '$0 ~ /Tom/{print $0}' datafile
nawk '$3 < 4000' datafile
打印第三个字段小于4000 的行
nawk -F: '/tom/{print $0}' datafile
nawk -F'[ :\t]' '{print $1,$2,$3}' datafile
指定空格,冒号,制表符作为分隔符
匹配操作符 ~
nawk '$1 ~ /[Bb]ill/' datafile
打印所有在第一个字段里面匹配到 Bill 或bill 的行
nawk '$1 !~ /ly$/' datafile
打印所有第一个字段不是以ly结尾的行
nawk '/^north/' datafile
打印所有以模式north 开头的行
nawk '/^(no|so)/' datafile
打印所有以模式no 或者 so开头的行
nawk '{print $1,$2,$3}' datafile
打印第1,2,3个字段,逗号被转换为OFS的值,
nawk '{print "the number of fields:" NF}' datafile
打印所有记录的字段数
nawk '$8 ~ /[0-9][0-9]$/{print $8}' datafile
如过第八个字段以两个数字结尾,就打印该字段
阅读(1463) | 评论(0) | 转发(1) |