shell脚本文本 三剑客AWK

@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:打印磁盘已经使用情况

shell脚本文本 三剑客AWK_第1张图片

示例2:打印字符串

shell脚本文本 三剑客AWK_第2张图片

示例3:打印字符串确定文件有多少行

shell脚本文本 三剑客AWK_第3张图片

2.2根据$n提取字段

示例1:提取IP地址
$n,代表取第三列

shell脚本文本 三剑客AWK_第4张图片
示例2:提取mac地址

shell脚本文本 三剑客AWK_第5张图片

2.3根据选项-F指定分隔符

示例1:打印/etc/passwd所有用户名

shell脚本文本 三剑客AWK_第6张图片

示例2:打印多列内容
打印时逗号可以表示空格,如果使用“:”或者“+”,需要将特殊符号加上双引号当成字符串打印

shell脚本文本 三剑客AWK_第7张图片

shell脚本文本 三剑客AWK_第8张图片
shell脚本文本 三剑客AWK_第9张图片
示例3:打印磁盘已经使用情况,去除%号

shell脚本文本 三剑客AWK_第10张图片
shell脚本文本 三剑客AWK_第11张图片

shell脚本文本 三剑客AWK_第12张图片
示例4:提取文本中的IP地址及时间

在这里插入图片描述

示例5:取出文本中的主机并放回

shell脚本文本 三剑客AWK_第13张图片

2.4根据关键字提取所在行

示例1:提取/etc/passwd以root开头的行

shell脚本文本 三剑客AWK_第14张图片

示例2:提取/etc/passwd root所在的行

shell脚本文本 三剑客AWK_第15张图片

示例3:提取/etc/passwd nogoin结尾的行

shell脚本文本 三剑客AWK_第16张图片

shell脚本文本 三剑客AWK_第17张图片

示例4:提取IP地址

shell脚本文本 三剑客AWK_第18张图片

2.5使用BEGIN输出包含指定字符的行并统计有多少行

shell脚本文本 三剑客AWK_第19张图片

2.6FS:列分割提取列

shell脚本文本 三剑客AWK_第20张图片

2.7NF:

示例1:当前处理的行的字段个数

shell脚本文本 三剑客AWK_第21张图片

示例2:打印出每行最后一个字段

shell脚本文本 三剑客AWK_第22张图片
示例3:打印出每行倒数第二个字段

shell脚本文本 三剑客AWK_第23张图片

shell脚本文本 三剑客AWK_第24张图片

2.8NR:

示例1:当前处理的行号

shell脚本文本 三剑客AWK_第25张图片

shell脚本文本 三剑客AWK_第26张图片
示例2:NR==n 代表行号等于什么

shell脚本文本 三剑客AWK_第27张图片
在这里插入图片描述

示例3:NR%2==0取偶数行

shell脚本文本 三剑客AWK_第28张图片

示例4:NR%2==1取奇数行
shell脚本文本 三剑客AWK_第29张图片

示例5:NR= =1,NR==4取区间行

shell脚本文本 三剑客AWK_第30张图片

示例5:取UID数值范围$n>1000
在这里插入图片描述

三.例题

1.统计出/etc/fstab文件中每个文件系统类型出现次数

shell脚本文本 三剑客AWK_第31张图片

2.提取主机名并放入原文件

shell脚本文本 三剑客AWK_第32张图片

3…统计/etc/fstab文件中每个单词出现的次数

shell脚本文本 三剑客AWK_第33张图片

4.提取出字符串Yd$C@M05MB%9&Bdh7dq+YVixp3vpw中的所有数字

shell脚本文本 三剑客AWK_第34张图片

你可能感兴趣的:(linux,网络,运维,正则表达式,服务器)