awk简介与表达式实例

1、awk概述

awk不仅仅是Linux系统中的一个命令,而且是一种编程语言

它可以用来处理数据和生成报告(excel)

处理的数据可以是一个或多个文件

可以使直接来自标准输入、也可以是通过管道获取标准输入

awk可以在命令行上直接编辑命令进行操作,也可以写成awk程序来进行更为复杂的操作

2、awk环境简介

3、awk的格式

awk指令是由模式、动作、或者模式和动作的组合组成

  • pattern即模式:可以类似理解成sed的模式匹配,可以由表达式组成,也可以是两个正斜杠之间的正则表达式。如果NR==1,这就是模式,可以理解为一个条件
  • action即动作:是由在大括号里面的一条或多条语句组成,语句之间使用分号隔开

4、记录和域

名称含义
record 记录,行
filed 域,区域,字段,列
  1. NF(number of field):表示一行中的区域(列)数量,$NF取最后一个区域
  2. $ 符号:表示取某个列(区域),如:$1,$2,$NF
  3. NR(number of record):表示行号,awk对每一行的记录号都有一个内置变量NR来保存,每处理完一条记录NR的值都会自动 +1
  4. FS(-F)field separator:列分隔符,以什么把行分割成多列

4.1 指定分隔符

4.2 条件和动作

4.3 只有条件

4.4 只有动作

默认处理所有行

4.5 多个模式和动作

4.6 $0

awk中$0表示整行

4.7 FNR

FNR与NR类似,不过文件记录不递增,每个文件都从1开始

5、正则表达式与操作符

awk同sed一样也可以通过模式匹配来对输入的文本进行匹配处理

awk也支持大量的正则表达式模式,大部分与sed支持的元字符类似

awk支持的正则表达式元字符

awk默认不支持的元字符,和需要添加参数才能支持的元字符

正则表达式的运用,默认是在行内查找匹配的字符串,若有匹配则执行action操作,但是有时候仅需要固定的列表匹配指定的正则表达式

如:

想取/etc/passwd文件中第5列($5)这一列查找匹配mail字符串的行,这样就需要用另外两个匹配操作符。并且awk里面只有这两个操作符来匹配正则表达式

正则匹配操作符说明
~ 用于对记录或区域的表达式进行匹配。
!~ 用于表达与~相反的意思。

正则实例

1)显示awk.txt中GHI列

2)显示包含321的行

显示所有列,可以什么都不用加

3)以#为分隔符,显示第一列以B开头或最后一列以1结尾的行

  • $1:第一列
  • ~:匹配
  • /^B/:以B开头
  • {print}:打印
  • $NF:最后一列
  • ~:匹配
  • /1$/:以1结尾
  • {print}:打印

4)以#为分隔符,显示第一列以B或C开头的行

6、比较表达式

awk是一种编程语言,能够进行更为复杂的判断,当条件为真时,awk就执行相关的action,主要是在针对某一区域做出相关的判断,如打印成绩在80分以上的,这样就必须对这个区域做比较判断

下表列出了awk可以使用的关系运算符,可以用来比较数字字符串,还有正则表达式,当表达式为真的时候,表达式结果为1,否则为0,只有表达式为真,awk才执行相关的action。

awk支持的关系运算符

运算符含义示例
< 小于 x>y
<= 小于或等于。 x<=y
== 等于 x==y
!= 不等于 x!=y
>= 大于或等于 x>=y
> 大于 x<y

显示awk.txt的第2,3行

posted @ 2020-07-06 17:25  hyunbar  阅读(544)  评论(0编辑  收藏  举报