返回顶部

Linux awk命令

 

 

 

目录

  1. 正则表达式模式
  2. 比较表达式模式
  3. 范围模式
  4. 特殊模式

一.awk是什么

awk 不仅仅时 linux 系统中的一个命令,而且是一种编程语言,可以用来处理数 据和生成报告(excel)。处理的数据可以是一个或多个文件,可以是来自标准 输入,也可以通过管道获取标准输入,awk 可以在命令行上直接编辑命令进行操 作,也可以编写成 awk 程序来进行更为复杂的运用。本章主要讲解 awk 命令的 运用。awk在工作中很多时候被用来处理log文件,进行一些统计工作等。

二.awk的格式

  •  参数 -F 指定分隔符,指定awk按照什么标志进行文件的切割,切割成一列一列的。(如果不指定-F参数,awk默认按照空格进行分割)
  •  awk 指令是由模式,动作,或者模式和动作的组合组成。
  • 模式既 pattern,可以类似理解成 sed 的模式匹配,可以由表达式组成,也可 以是两个正斜杠之间的正则表达式。比如 NR==1,这就是模式,可以把他理 解为一个条件。
  • 动作即 action,是由在大括号里面的一条或多条语句组成,语句之间使用分号隔开。
     awk   -F  "[  ]+"   '{print   NR,$1}'   file

 

 

  • [ ] 多个分隔符  [ ]+贪婪模式
  • $1 代表取第一列 $0 默认全输出
  • NR 显示第一列行号

2.1 特殊模式

2.1.1 正则表达式模式

awk 同 sed 一样也可以通过模式匹配来对输入的文本进行匹配处理。说到模式 匹配,肯定少不了正则表达式,awk 也支持大量的正则表达式模式,大部分与 sed 支持的元字符类似,而且正则表达式是玩转三剑客的必备工具,下表列出了 awk 支持的正则表达式元字符:

符号

功能  

^ 以  开头
$ 以  结尾
. 点 ..匹配   后边的任意两个字符
*  
+ 重复前一个字符一次或多次
匹配0个或一个前边的字符
[] 匹配只当字符组内的任意一个字符
[^] 不匹配指定组里的字符
() 子表达式组合
| 或的意思

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

awk 默认不支持的正则 参数:--posix

x{m} 匹配x m次
x{m,} 匹配x至少m次
x{m,n} 匹配x至少m次最少N次

 

 

 

 

 

 

 awk正则操作符 

~ 对区域的表达式进行匹配
!~ 取反 ~

 

 

 

  • 正则表达式的运用,默认是在行内查找匹配的字符串,若有匹配则执行 action 操作,但是有时候仅需要固定的列来匹配指定的正则表达式,比如:我想取 /etc/passwd 文件中第五列{$5}这一列查找匹配 mail 字符串的行,这样就需 要用另外两个匹配操作符,并且 awk里面只有这两个操作符来匹配正则表达式。

示例

模板

正则输出 取包含Zhang的整行

取出某一行

  • $2~  第二列  正则
  • /^B/匹配开头以B的

2.1.2 练习

练习题 1:显示姓 Zhang 的人的第二次捐款金额及她的名字

练习题 2:显示 Xiaoyu 的名字和 ID 号码

练习题 3:显示所有以 41 开头的 ID 号码的人的全名和 ID 号码

练习题 4:显示所有以一个 D 或 X 开头的人名全名

练习题 5:显示所有 ID 号码最后一位数字是 1 或 5 的人的全名

练习题 6:显示 Xiaoyu 的捐款,每个值都有以$开头。如 $520$135

练习题 7:显示所有人的全名,以姓,名的格式显示,如 Meng,Feixue

2.1.2 比较表达式模式

比较表达式元字符

< 小于
<= 小于等于
== 等于
!= 不等于
>= 大于等于
> 大于

 

 

 

 

 

 

运算符

~ 与正则表达式
!~ 与正则表达式不匹配

 

 

 

2.1.3 范围模式

匹配从条件 1 开始到条件 2 介绍的范围

2.1.4 特殊模式

awk  [options]  'BEGIN{ commands } pattern{ commands } END{ commands }'  file

 

 

BEGIN 模块 在awk读取前执行,可以定义内置变量,可以输出表头,只执行一次

END 模块 awk读完所有文件的时候,在执行END模块,输出一个结果,只执行一次

echo -e '1\n2\n3' | awk 'BEGIN{print "begin"}{print $1}END{print "end"}'
输出:
begin
1
2
3
end

三.awk数组

3.1 什么叫数组

awk 提供了数组来存放一组相关的值。 awk 是一种编程语言,肯定也支持数组的运用,但是又不同于 c 语言的数组。数 组在 awk 中被称为关联数组,因为它的下标既可以是数字也可以是字符串。

3.2 循环

for (i in h) print i,h[i]

  • i 代表变量(元素名)
  • h 数组名

3.3 实例

求文件行数

去重求和

 

四.awk的内置变量

awk中同样定义了很多内置变量,我们可以直接像使用普通变量一样使用他们,由于awk的版本众多,有些内置变量并不是得到所有awk版本的支持。

NF 表示字段数,在执行过程中对应于当前的字段数
NR 表示记录数,在执行过程中对应于当前的行号
ORS 输出记录分隔符(默认值是一个换行符)

RS 记录分隔符(默认是一个换行符)

 

posted @ 2018-10-29 22:00  五更琉璃丶  阅读(564)  评论(0编辑  收藏  举报