1.awk基本介绍
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具(awk文本处理工具,可以加载一行,处理一行)可以在无交互的模式下实现复杂的文本操作。
相较于sed常作用于一整个行的处理,awk则比较倾向于一行当中分成数个字段来处理,因为awk相当适合小型的文本数据。
tips:vim 文本处理工具内存不足打不开文件,把整个文件加载到内存里处理,如果内存不足,无法
打开文件。
2.基本格式
awk 选项‘ 表达式{处理动作}’
-F 指定分隔符
-v 指定变量
处理动作:print 打印 printf 打印
内建变量,不能用双引号括起来,不然系统会把它当成字符串。
内置变量 作用
$0 当前处理的行的整行内容
$n 当前处理行的第n个字段(第n列)
NR 当前处理的行的行号(序数)
NF 当前处理的行的字段个数。$NF代表最后一个字段
FS 列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与"-F"作用相同
OFS 输出内容的列分隔符
FILENAME 被处理的文件名
RS 行分隔符。awk从文件中读取资料时,将根据RS的定义把资料切割成许多条记录, 而awk一次仅读入一条记录进行处理。预设值是"\n"
3. 打印文本内容
-
awk可以将自动将多个空格压缩成一个空格
-
打印字符串需要加双引号
3.1 打印磁盘可用情况
![](https://img-blog.csdnimg.cn/85674d089b1b403fb910187ebde7e8f5.png)
3.2 打印字符串
4. 根据$n以及NR提取字段
根据选项-F指定分隔符
打印多行内容
打印磁盘已使用情况(去除百分号)
取出文本主机号并放回。
文本内容
5. 根据关键字提取所在行
提取/etc/passwd以root开头的行
提取/etc/passwd含有root的行
6. 使用BEGIN输出包含指定字符的行并统计有多行
-
BEGIN模式表示,在处理指定的文本之前,需要先执行BEGIN模式中指定的动作;
-
awk再处理指定的文本,之后再执行END模式中指定的动作;
-
END{ } 语句块中,往往会放入打印结果等语句。
7. NF:当前处理行的整行内容
每一行有几个字段
打印出每一段最后一段内容
打印出每一段最后第二段内容