shell脚本文本 三剑客AWK

一.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中的所有数字

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/fyb012811/article/details/132378755