正则表达式

shell 正则表达式之awk

本文主要是介绍shell 正则表达式之awk,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

正则表达式之awk

  • 概述:
  • 工作原理:
  • Awk基本语法
    • 常见内置变量
    • BEGIN
    • END
    • FS =“:“
    • OFS
    • 使用管到符 | 处理命令输出结果
  • Awk应用案例

概述:

AWK是一种处理文本文件的语言,是一个强大的文本分析工具。
它是专门为文本处理设计的编程语言,也是行处理软件,通常用于扫描、过滤、统计汇总工作数据可以来自标准输入也可以是管道或文件
20世纪70年代诞生于贝尔实验室,现在centos7用的是gawk
之所以叫 Awk是因为其取了三位创始人Alfred Aho,Peter Meinberger,和 Brian Kernighan 的 Family Name的首字符。

工作原理:

当读到第一行时,匹配条件,然后执行指定动作,再接着读取第二行数据处理,不会默认输出
如果没有定义匹配条件默认是匹配所有数据行,awk隐含循环,条件匹配多少次动作就会执行多少次

Awk基本语法

awk  [选项]  '模式或条件{编辑指令}' 文件
或
awk -f 脚本文件 文件

常见内置变量

在这里插入图片描述
案例:
awk ‘{print $1}’ pass.txt:打印第一列,以空格隔开为一列。
在这里插入图片描述
awk -F: ‘{print $1}’ pass.txt:以: 为分隔符。显示第一列
在这里插入图片描述

awk -F: ‘{print $1" "$2}’ pass.txt:显示第一和第二列,并添加空格。" "中可以添加其他常量
在这里插入图片描述
在这里插入图片描述

先执行$0显示整行,再打印第一列和第二列。
在这里插入图片描述
NF:显示每一行有多少列
在这里插入图片描述
NR:显示行号
在这里插入图片描述
“\t”:制表符。相当于一个TAP键
在这里插入图片描述
-F[/:] :定义:和/为分隔符
在这里插入图片描述
/^bin/ :找出第一列以bin开头的
在这里插入图片描述
/sbin/ :打印有sbin的所有行
在这里插入图片描述

匹配第一列有daemon的行,并把最后一列输出。
~:表示模糊匹配,$NF:最后一列
在这里插入图片描述
输出第5列不包含dae的所有行的第一列和最后一列。
在这里插入图片描述
打印行号第1, 3 的行 ==精准匹配。
在这里插入图片描述
打印行号含有1 3 的行
在这里插入图片描述
精确匹配第一列有sssd的行
在这里插入图片描述
保留原来的格式,输出以冒号为分割
在这里插入图片描述

BEGIN

当读取第一条数据之前所要做的事情,可进行运算

在这里插入图片描述
在引用变量时需要加单引号’ ’
在这里插入图片描述

END

在所有数据处理完后执行
先打印以冒号分割的第一列的第一行。在打印加法运算的结果。
在这里插入图片描述

FS =“:“

指定分隔符
在这里插入图片描述

OFS

输出时以什么作为分隔符, ,映射为空格
在这里插入图片描述
没有定义分隔符时,以最后的空格为分隔符
在这里插入图片描述

在这里插入图片描述

使用管到符 | 处理命令输出结果

在这里插入图片描述

Awk应用案例

监控磁盘空间,当磁盘的使用空间超过90%时发邮箱报警。

#!/bin/bash
space=`df | sed -ne '/\/$/p' | awk '{print $5}' | sed 's/%//'`
<<abc
df:查看磁盘
sed -ne '/\/$/p':截取以“/”为结尾的行
awk '{print $5}':打印第5个字段
sed 's/%//':去掉%。
abc
if [[ $space -ge 90 ]];then
  echo "磁盘空间不足" | mail -s "Disk Alarm"admin@example.com
fi
这篇关于shell 正则表达式之awk的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!