背景
AWK是一个优良的文本工具,是Linux环境下现有的功能最强大的数据处理引擎之一。AWK 提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。他的创建者创建者已将它正式定义为“样式扫描和处理语言”。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
语法格式
不管语法怎么复杂,其语法始终为:
awk 'pattern {action}'
格式详解-pattern
pattern是执行条件,通常是正则表达式
条件类型 | 条件 | 条件说明 |
---|---|---|
AWK保留字 | BEGIN | 在AWK程序开始时执行,仅会在程序开始的时候被执行一次 |
AWK保留字 | END | 在AWK程序结束之前执行,仅会在程序结束的时候执行一次 |
关系运算符 | > | 大于 |
关系运算符 | < | 小于 |
关系运算符 | == | 判断是否等于 |
关系运算符 | >= | 大于等于 |
关系运算符 | <= | 小于等于 |
关系运算符 | != | 不等于 |
关系运算符 | pattern1~pattern2 | 判断pattern1是否包含能匹配上pattern2的字符串 |
关系运算符 | pattern1!~pattern2 | 判断pattern1是否不包含能匹配上pattern2的字符串 |
正则判断 | /pattern/ | //之间为正则表达式,也支持字符串 |
格式详解-action
awk的动作通常为:格式化输出
内置变量
$n:表示第几个变量,如:$1,$2,就表示第一个变量,第二个变量
$0:表示执行过程中当前行的全部内容,即,所有的变量值
$NF:表示最后一个变量
NR:表示记录数,即当前执行的行号
FNR:同NR,这个是相对于文件而言的
NF:表示字段个数
FS:字段分隔符,默认是任何的空格
RS:记录分隔符,默认是一个换行符
OFS:输出字段分隔符,默认是一个空格
ORS:输出记录分隔符,默认是换行符
ARGC:命令行参数的数量
ARGV:命令行参数的数组
ARGIND:命令行当前文件的位置(从0开始)
CONVFMT:数字转换格式(默认为:%.6g)
OFMT:数字的输出格式(默认是:%.6g)
ENVIRON:环境变量关联数组
ERRNO:最后一个系统错误描述
FIELDWIDTHS:字段宽度列表(空格分隔)
FILENAME:当前输入的文件的名字
IGNORECASE:如果为真,就忽略大小写
RSTART:match函数匹配的字符串的第一个位置
RLENGTH:match函数匹配的字符串的长度
SUBSEP:数组下标分隔符(默认是34)
命令的使用
现在,先准备一个测试文件test.txt,文件内容如下:
//假设该文件保存的数据格式为
//名字 语文成绩 数学成绩 英语成绩 物理成绩 化学成绩
xiaoming 98 99 44 22 56
xiaohong 56