awk简述

在 Linux/UNIX 系统中,awk 是一个功能强大的编辑工具,逐行读取输入文本,默认以空格或tab键作为分隔符作为分隔,并按模式或者条件执行编辑命令。
AWK信息的读入也是逐行指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以在无交互 的情况下实现相当复杂的文本操作,被广泛应用于 Shell 脚本,完成各种自动化配置任务。

awk的工作过程

第一步:执行BEGIN{action;… }语句块中的语句。

第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ action;… }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。

第三步:当读至输入流末尾时,执行END{action;…}语句块。

BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中

END语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块。

pattern语句块中的通用命令是最重要的部分,也是可选的。如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块。

awk的工作原理

sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理,且默认情况下字段的分隔符为空格或 tab 键。
awk 执行结果可以通过 print 的功能将字段数据打印显示

awk的基本格式及其内置变量

awk 选项 ‘模式或条件 {操作}’ 文件1 文件2…

-F “分隔符” 指明输入时用到的字段分隔符,默认的分隔符是若干个连续空白符
-v(小v) var=value 变量赋值

注意一定是单引号:‘模式或条件 {操作}’
{ }外指定条件,{ }内指定操作。
用逗号指定连续的行,用 || 指定不连续的行。&&表示”且“。
内建变量,不能用双引号括起来,不然系统会把它当成字符串。

内置变量
$0: 当前处理的行的整行内容
$n: 当前处理行的第n个字段(第n列)
NR: 当前处理的行的行号(序数)
NF: 当前处理的行的字段个数。$NF代表最后一个字段
FS: 列分割符。指定每行文本的字段分隔符,输入内容的分隔符,
默认为空格或制表位。与"-F"作用相同 用-F可以不加单引号 -F:,用FS必须用=""
OFS:输出内容的列分隔符
FILENAME:被处理的文件名
RS: 行分隔符。awk从文件中读取资料时,
将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录进行处理。预设值是"\n"


0和1放置{ }前,能够起到限制打印内容的作用(默认为"1"),如果为0,就不打印内容

getline

getline的工作过程

1、当getline左右无重定向符号(“<”)或者管道符号(“|”)时,awk首先读取的是第一行,而getline获取的是光标跳转至下一行的内容(也就是第二行)。

2、当getline左右有管道符号或重定向符时,getline则作用定向输入文件,由于文件是刚打开,并没有被awk读入一行,而只是getline读入,所以getline返回的是文件的第一行,而不是跳转至一行输入。

原因:getline运行之后awk会改变NF,NR,$0,FNR等内部变量,所以此时读取$0的行号不再为1,而是2。


把ls的输出传递给getline函数,line是变量 把ls的内容输出给变量,然后打印出结果,如果无内容,不做任何操作

文本内容匹配过滤打印

BEGIN打印模式:
格式:awk ‘BEGIN{…};{…};END{…}’ 文件
处理过程:
1、在awk处理指定的文本之前,需要先执行BEGIN{…}模式里的命令操作
2、中间的{…} 是真正用于处理文件的命令操作
3、在awk处理完文件后才会执行END{…}模式里的命令操作。END{ }语句块中,往往会放入打印结果等语句。

对字段进行处理打印

-v的用法:变量赋值


fs的是:然后使用-v给FS赋值=:,输入的时候FS是:,-v给OFS赋值输出的时候变量为+,然后打印第一列和第三列

条件判断打印

awk的三元表达式与精准筛选用法

awk的三元表达式继承了java的用法,格式与Java相似

格式:awk ‘(条件表达式)?(A表达式或者值):(B表达式或者值)’

awk的精准筛选:

$n(> < ==):  用于对比数值
$n~"字符串": 代表第n个字段包含某个字符串
$n!~"字符串": 代表第n个字段不包含某个字符串
$n=="字符串": 代表第n个字段为某个字符串
$n!="字符串": 代表第n个字段不为某个字符串
$NF: 代表最后一个字段
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6


awk的分隔符用法

RS 指定行分隔符:
awk从文件中读取资料时,将根据RS的定义把资料切割成许多条记录,
而awk一次仅读入一条记录进行处理。内置变量RS的预设值是"\n" 也就是换行。
也可以使用BEGIN模式在操作前进行行分隔符的改变

指定输出的分隔符

OFS:输出内容的列分隔符。

($n=$n用于激活,否则不生效,n必须存在)
  • 1

awk结合数组运用

awk中定义数组打印:

awk中的数组形成遍历

面试题

监控内存脚本(当内存使用率>90%就报警)

Mem_total=$(free -m | grep -w Mem | awk '{print $2}')
Mem_used=$(free -m | grep -w Mem | awk '{print $3}') a=\((</span><span class="token builtin class-name">echo</span> <span class="token string">"scale=2;(<span class="token variable">\)Mem_used/$Mem_total)*100"|bc)

Mem=</span><span class="token builtin class-name">echo</span> $a<span class="token operator">|</span><span class="token function">awk</span> -F. <span class="token string">'{print $1}'</span><span class="token variable">

if [ \(Mem</span> -gt <span class="token number">90</span> <span class="token punctuation">]</span>
<span class="token keyword">then</span>
<span class="token builtin class-name">echo</span> <span class="token string">"内存使用超过90%,请清理内存"</span>
<span class="token keyword">else</span>
<span class="token builtin class-name">echo</span> <span class="token string">"系统安全,请放心使用,内存使用情况:<span class="token variable">\)Mem%"

fi

监控CPU使用情况脚本

top -b -n 1 | awk 'NR==3{print}'| awk '{print "目前CPU的使用情况:"$2+$4}'
  • 1

监控磁盘使用情况脚本(当磁盘使用率>90%就报警)

 a=$(df -T | awk 'NR==2{print}' | awk '{print $4}')

b=$(df -T | awk 'NR==2{print}' | awk '{print \(5}'</span><span class="token variable">)</span></span>
<span class="token assign-left variable">c</span><span class="token operator">=</span><span class="token variable"><span class="token variable">\)(echo "scale=2;(\(a</span>/<span class="token variable">\)b)*100"|bc) sum=</span><span class="token builtin class-name">echo</span> $c <span class="token operator">|</span><span class="token function">awk</span> -F. <span class="token string">'{print $1}'</span><span class="token variable">

if [ \(sum</span> -gt <span class="token number">90</span> <span class="token punctuation">]</span>
<span class="token keyword">then</span>
<span class="token builtin class-name">echo</span> <span class="token string">"磁盘使用超过90%,请清理磁盘"</span>
<span class="token keyword">else</span>
<span class="token builtin class-name">echo</span> <span class="token string">"系统安全,请放心使用,磁盘使用情况:<span class="token variable">\)sum%"

fi

文章知识点与官方知识档案匹配,可进一步学习相关知识
云原生入门技能树首页概览12816 人正在系统学习中

[转帖]Shell三剑客之awk的更多相关文章

  1. shell 三剑客之 awk

    awk 是shell 里的常用命令,非常强大!

  2. shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计

    shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计 shell中的数组的用法: shell数组中的下标是从0开始的 array=("Allen" & ...

  3. shell编程系列20--文本处理三剑客之awk常用选项

    shell编程系列20--文本处理三剑客之awk常用选项 awk选项总结 选项 解释 -v 参数传递 -f 指定脚本文件 -F 指定分隔符 -V 查看awk的版本号 [root@localhost s ...

  4. shell编程系列19--文本处理三剑客之awk中的字符串函数

    shell编程系列19--文本处理三剑客之awk中的字符串函数 字符串函数对照表(上) 函数名 解释 函数返回值 length(str) 计算字符串长度 整数长度值 index(str1,str2) ...

  5. shell编程系列18--文本处理三剑客之awk动作中的条件及if/while/do while/for循环语句

    shell编程系列18--文本处理三剑客之awk动作中的条件及if/while/do while/for循环语句条件语句 if(条件表达式) 动作1 else if(条件表达式) 动作2 else 动 ...

  6. shell编程系列17--文本处理三剑客之awk动作中的表达式用法

    shell编程系列17--文本处理三剑客之awk动作中的表达式用法 awk动作表达式中的算数运算符 awk动作中的表达式用法总结: 运算符 含义 + 加 - 减 * 乘 / 除 % 模 ^或** 乘方 ...

  7. shell编程系列16--文本处理三剑客之awk模式匹配的两种方法

    shell编程系列16--文本处理三剑客之awk模式匹配的两种方法 awk的工作模式 第一种模式匹配:RegExp 第二种模式匹配:关系运算匹配 用法格式对照表 语法格式 含义 RegExp 按正则表 ...

  8. shell编程系列15--文本处理三剑客之awk格式化输出printf

    shell编程系列15--文本处理三剑客之awk格式化输出printf printf的格式说明符 格式符 含义 %s 打印字符串 %d 打印十进制数 %f 打印一个浮点数 %x 打印十六进制数 %o ...

  9. shell编程系列14--文本处理三剑客之awk的概述及常用方法总结

    shell编程系列14--文本处理三剑客之awk的概述及常用方法总结 awk是一个文本处理工具,通常用于处理数据并生成结果报告 awk的命名是它的创始人 Alfred Aho.Peter Weinbe ...

  10. Linux系统Shell脚本第五章:shell数组、正则表达式及文件三剑客之AWK

    目录 一.shell数组 1.数组分类 2.定义数组方法 二.正则表达式 1.元字符 2.表示次数 3.位置锚定 4.分组 5.扩展正则表达式 三.文本三剑客之AWK 1.awk 2.使用格式 3.处 ...

随机推荐

  1. Unity3D学习笔记5——创建子Mesh

    目录 1. 概述 2. 详论 2.1. 实现 2.2. 解析 3. 参考 1. 概述 在文章Unity3D学习笔记4--创建Mesh高级接口通过高级API的方式创建了一个Mesh,里面还提到了一个Su ...

  2. GaussDB技术解读系列:高级压缩之OLTP表压缩

    本文分享自华为云社区<DTCC 2023专家解读 | GaussDB技术解读系列:高级压缩之OLTP表压缩>,作者:GaussDB 数据库 . 8月16日,第14届中国数据库技术大会(DT ...

  3. 云小课|使用SpringBoot快速构建FunctionGraph HTTP函数

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:本篇云小课主要指导 ...

  4. 转角遇上Volcano,看HPC如何应用在气象行业

    摘要:高性能计算(HPC)在各个领域都有广泛的应用.本文通过典型的HPC应用WRF,介绍了HPC应用在Kubernetes+Volcano上运行方式. Kubernetes已经成为云原生应用编排.管理 ...

  5. 一文详解什么是可解释AI

    摘要:本文带来什么是可解释AI,如何使用可解释AI能力来更好理解图片分类模型的预测结果,获取作为分类预测依据的关键特征区域,从而判断得到分类结果的合理性和正确性,加速模型调优. 1. 为什么需要可解释 ...

  6. 华为云构建云原生DevSecOps平台,保障软件供应链全流程安全可信

    摘要:面临网络安全挑战的大环境下,华为云构筑的云原生DevSecOps平台,打造了创新可控的安全服务,助力企业软件供应链全生命周期安全. 2022年8月13日,"2022中国DevOps社区 ...

  7. 带你读顶会论文丨基于溯源图的APT攻击检测

    摘要:本次分享主要是作者对APT攻击部分顶会论文阅读的阶段性总结,将从四个方面开展. 本文分享自华为云社区<[论文阅读] (10)基于溯源图的APT攻击检测安全顶会总结>,作者:eastm ...

  8. 火山引擎 DataLeap 构建Data Catalog系统的实践(三):关键技术与总结

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 关键技术 构建一个好的Data Catalog系统,需要考虑的核心产品设计和技术设计有很多.篇幅所限,本文只概要介 ...

  9. 柔性上肢康复机器人研究中的VR技术

    上肢康复机器人用于对脑卒中患者进行上肢康复治疗,能够维持和扩大患者关节活动度.增强肌肉力和协调性,以防止肌肉萎缩.关节痉挛等各类症状的出现,最终重建肢体功能,以便回归正常生活.现有的上肢康复机器人训练 ...

  10. 为什么加了@Transactional注解,事务没有回滚?

    在昨天的<事务管理入门>一文发布之后,有读者联系说根据文章尝试,加了@Transactional注解之后,事务并没有回滚.经过一顿沟通排查之后,找到了原因,在此记录一下,给后面如果碰到类似 ...