@TOC
一.AWK工具介绍
- AWK是一种处理文本文件的语言,是一个强大的文本分析工具
- 可以在无交互的模式下实现复杂的文本操作
- 相较于sed常作用于一整行的处理,awk则比较倾向于一行当中分成数个字段来处理,因为awk相当适合小型的文本数据
1.1AWK命令的基本格式
awk [选项] ‘模式条件{操作}’ 文件1 文件2...
awk -f|-v 脚本文件 文件1 文件.....
1.2AWK工作原理
-
前面提到sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个"字段"然后再进行处理,且默认情况下字段的分隔符为空格或tab键。awk 执行结果可以通过print的功能将字段数据打印显示。
-
在使用awk命令的过程中,可以使用逻辑操作符"&&“表示"与”、““表示"或”、”!“表示"非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。
-
awk后面接两个单引号并加上大括号{ }来设置想要对数据进行的处理操作,awk可以处理后续接的文件,也可以读取来自前个命令的标准输。
1.3常见的内置变量
- FS:列分隔符,指定每行文本的字段分隔符,默认为空格或制表符,与“-F”作用相同
- NF:当前处理的行的字段个数
- NR:当前处理的行的行号(序数)
- $0:当前处理的行的整行内容
- $n:当前处理的行的第n个字段(第n列)
- FILENAME:被处理的文件名
- RS:行分隔符,awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录,以进行处理,预设值是‘\n’
二.示例
2.1打印文本内容
- awk可以自动将多个空格压缩成一个空格
- 打印字符串需要加双引号
示例1:打印磁盘已经使用情况
示例2:打印字符串
示例3:打印字符串确定文件有多少行
2.2根据$n提取字段
示例1:提取IP地址
$n,代表取第三列
示例2:提取mac地址
2.3根据选项-F指定分隔符
示例1:打印/etc/passwd所有用户名
示例2:打印多列内容
打印时逗号可以表示空格,如果使用“:”或者“+”,需要将特殊符号加上双引号当成字符串打印
示例3:打印磁盘已经使用情况,去除%号
示例4:提取文本中的IP地址及时间
示例5:取出文本中的主机并放回
2.4根据关键字提取所在行
示例1:提取/etc/passwd以root开头的行
示例2:提取/etc/passwd root所在的行
示例3:提取/etc/passwd nogoin结尾的行
示例4:提取IP地址
2.5使用BEGIN输出包含指定字符的行并统计有多少行
2.6FS:列分割提取列
2.7NF:
示例1:当前处理的行的字段个数
示例2:打印出每行最后一个字段
示例3:打印出每行倒数第二个字段
2.8NR:
示例1:当前处理的行号
示例2:NR==n 代表行号等于什么
示例3:NR%2==0取偶数行
示例4:NR%2==1取奇数行
示例5:NR= =1,NR==4取区间行
示例5:取UID数值范围$n>1000
三.例题
1.统计出/etc/fstab文件中每个文件系统类型出现次数
2.提取主机名并放入原文件
3…统计/etc/fstab文件中每个单词出现的次数
4.提取出字符串Yd$C@M05MB%9&Bdh7dq+YVixp3vpw中的所有数字