运维——三剑客之AWK(一)

2024-06-04 13:38
文章标签 运维 awk 三剑客

本文主要是介绍运维——三剑客之AWK(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

awk介绍
awk:Aho, Weinberger, Kernighan,取三个人名字的前三个字母,报告生成器,格式化文本输出
                   有多种版本:New awk(nawk),GNU awk( gawk)(centos中自带的是gawk)
基本格式:awk [options] 'program' file…
program:pattern{action statements;..}
pattern和action:
pattern部分决定动作语句何时触发及触发事件
BEGIN,END
action statements对数据进行处理,放在{}内指明
print, printf(列和列之间对齐)
分割符、域和记录
awk执行时,由分隔符分隔的字段(域)标记$1,$2..$n称为域标识。$0为所有域,注意:和shell中变量$符含义不同
文件的每一行称为记录 $1 $2之间可指定分隔符必须加上双引号
省略action,则默认执行 print $0 的操作


awk工作原理
第一步:执行BEGIN{action;… }语句块中的语句
第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ action;… }语句块,它逐行扫描文件,从第一行到最后一                        行重复这个过程,直到文件全部被读取完毕。
第三步:当读至输入流末尾时,执行END{action;…}语句块
             BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表                        格的表头等语句通常可以写在BEGIN语句块中
             END语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在                           END语句块中完成,它也是一个可选语句块
             pattern语句块中的通用命令是最重要的部分,也是可选的。如果没有提供pattern语句块,则默认执行{ print },                       即打印每一个读取到的行,
awk读取的每一行都会执行该语句块
print格式: print item1, item2, ...
要点:
(1) 逗号分隔符
(2) 输出的各item可以字符串,也可以是数值;当前记录的字段、变量或awk的表达式
(3) 如省略item,相当于print $0
awk变量
变量:内置和自定义变量
FS:输入字段分隔符,默认为空白字符
awk -v FS=':' '{print $1,FS,$3}’ /etc/passwd
awk –F: '{print $1,$3,$7}’ /etc/passwd
OFS:输出字段分隔符,默认为空白字符
awk -v FS=‘:’ -v OFS=‘:’ '{print $1,$3,$7}’ /etc/passwd
RS:输入记录分隔符,指定输入时的换行符
awk -v RS=' ' ‘{print }’ /etc/passwd
ORS:输出记录分隔符,输出时用指定符号代替换行符
awk -v RS=' ' -v ORS='###'‘{print }’ /etc/passwd
NF:字段数量
awk -F: ‘{print NF}’ /etc/fstab,引用内置变量不用$
awk -F: '{print $(NF-1)}' /etc/passwd
NR:记录号
awk '{print NR}' /etc/fstab ; awk END'{print NR}' /etc/fstab
FNR:各文件分别计数,记录号
awk '{print FNR}' /etc/fstab /etc/inittab
FILENAME:当前文件名
awk '{print FILENAME}’ /etc/fstab
ARGC:命令行参数的个数
awk '{print ARGC}’ /etc/fstab /etc/inittab
awk ‘BEGIN {print ARGC}’ /etc/fstab /etc/inittab
ARGV:数组,保存的是命令行所给定的各参数
awk ‘BEGIN {print ARGV[0]}’ /etc/fstab /etc/inittab
awk ‘BEGIN {print ARGV[1]}’ /etc/fstab /etc/inittab
自定义变量(区分字符大小写)
(1) -v var=value
(2) 在program中直接定义
首先要注意AWK中的行可不是我们平时说的,他可以指定,比如我们指定以冒号为分割符那么从开始到第一个冒号之间就是
第一行,第一个冒号与第二个冒号之间就是第二行,以此类推
$1 $2 分别表示第几个字段,但$0表示所有域与print默认的输出一样
awk -F: '{print}'  /etc/passwd和awk -F: '{print $0}' /etc/passwd 执行结果是一样的,如图:




看了上面那么多是不是头晕了,没事我们通过例子来说明:


还可以利用管道


总结:AWK可以用管道、重定向等作为其标准输入
如上,这样的输出并不太易读,我们还可以根据自己的爱好给两个字段之间添加一些符号比如:



变量在使用前必须要先定义,而且在前面加上-v 有几个变量就加几个,
如果在输出时不想换行输出想根据自己的定义输出分隔符那么我们可以这样定义:



我们还可以查看每行到底有几个字段:


对比下面这个


如果加$符号表示的是一个默认变量,代表这行的最后一个字段,如果不加表示这行总共有几个字段

根据上面的介绍我们还可以取倒数第几个字段如下:


那么这个文件到底有几行呢,我们可以这样查看:(为了节约空间截图省略下面的部分)


如果多个文件是什么情况呢?



竟让把两个文件当作一个文件去统计行号了,这并不是我们想要的结果,没事我们还有命令请看:



这样就可以显示每个文件的行数了,那么问题又来了,我们怎么知道是哪个文件啊,没关系且往下看:



这样是不是就一目了然了
我们还可以在没有处理文本之前做一些事情或者在处理之后做一些事情,也可以这样来做:



特别注意:BEGIN END都必须大写,并且在单引号内,后边必须有大括号括起来

接下来看看变量如何使用:在使用变量之前我们要先定义后使用,如果没有先定义就使用会是怎么样的情况呢,如下图:


所以变量必须要先定义后使用如下图:


调用文件

    如果经常要用到某个Pattern,那么我们可以先把pattern存放在一个文件中,用的时候只需去调用就     可以,例如:

编辑文件 vim awkscript

   {print $1,$7}  (对经常用的pattern进行编辑 )

  接下来我们就可以调用了



如果你感觉对您有帮助别忘了点赞评论让更多的爱好者学习,如果有错误,也要及时给我留言我会及时改正

这篇关于运维——三剑客之AWK(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1030242

相关文章

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

网络安全运维培训一般多少钱

在当今数字化时代,网络安全已成为企业和个人关注的焦点。而网络安全运维作为保障网络安全的重要环节,其专业人才的需求也日益增长。许多人都对网络安全运维培训感兴趣,那么,网络安全运维培训一般多少钱呢?   一、影响网络安全运维培训价格的因素   1. 培训内容的深度和广度   不同的网络安全运维培训课程涵盖的内容有所不同。一些基础的培训课程可能主要涉及网络安全基础知识、常见安全工具的使用等,价

linux运维排查常用命令(开发专享)

cd: 进入到某个目录下 cd hikvision ll:详细展示该目录下有的文件 ll su 用户名:切换用户名 例子: su root 根据字符串在文件中查找信息:Grep –a –i 字符串 文件名 例子: grep -a -i 'indexCode=4a28a0dfe0244c0cbabcd9b2c3b60327' nms.nmsweb.debug.log cat 文

Node.js应用的高效部署与运维:从流程自动化到精细化监控

Node.js应用的高效部署与运维:从流程自动化到精细化监控 目录 🚀 使用 pm2 管理 Node.js 应用🐳 容器化部署(Docker)☁️ 云服务部署与自动化扩展📈 应用监控与健康状态维护🤖 自动化运维与流程优化🛠️ 版本控制与发布管理 🚀 使用 pm2 管理 Node.js 应用 pm2 是 Node.js 生态中非常重要的进程管理工具,它简化了 Node.j

乌云章华鹏:如何构建高效的安全运维服务平台

如何构建高效的安全运维服务平台 大家好,我是乌云的章华鹏,今天和大家分享的话题是“高效安全运维服务平台的构建”,包括:企业的数据安全问题,运维安全中面临的网络、系统服务、应用相关配置等问题。 企业安全的核心是数据安全 当我们在讨论如何构建安全运维服务平台之前,我们需要考虑的问题是构建这样一个平台的核心需求是什么?核心需求是帮助企业解决安全风险,避免因为安全风险带来的业务损失。 我们都知道对

企业级Ansible自动化运维项目案例:实战与技巧

在企业级的IT运维中,自动化已成为提高效率、减少人为错误和保证服务一致性的关键手段。Ansible作为一种简单但功能强大的自动化工具,广泛应用于配置管理、应用程序部署、任务自动化和IT编排。本文将通过一个企业级的Ansible自动化运维项目案例,详细介绍如何从零开始设计、实施和优化自动化解决方案,并探讨其中的实战技巧。 一、项目背景 某大型企业拥有多个数据中心和数百台服务器,涉及不同的操作系统

运维学习————Jenkins部署Jar包

目录 使用Jenkins部署Jar包 1、在Jenkins构建Jar包 2、把项目部署到jenkins本地 3、部署到远程服务器上(不是Jenkins所在的服务器) 4、其他jenkins部署方式(使用插件publish over ssh) 1、安装插件 2、配置system 3、jenkins配置 使用Jenkins部署Jar包 1、在Jenkins构建Jar包

技术掌舵人齐聚Gdevops峰会,解读数据库、智慧运维、Fintech转型精要

2020年,Gdevops全球敏捷运维峰会开启了传播前沿技术、助力技术人成长进阶、促进跨界交流合作的第五个年头。依托迄今成功举办的17场大会在分享议题上的精心打磨、在技术圈子里的口碑传播,Gdevops在展开新一年技术巡演中邀请到更顶级的嘉宾阵容,将带来更重磅的科技成果与独家实践。 2020 Gdevops全球敏捷运维峰会 时间:2020年9月11日 地点:北京新世纪日航饭店(北京市海淀区首都

awk_常用参数汇总

awk 是一个强大的文本处理工具,其中特殊变量用于管理和操作文本。以下是对你提到的变量的详细解释和示例: NR:当前处理的行号。NF:当前行的字段数。FS:输入字段的分隔符。OFS:输出字段的分隔符。FNR:每个文件中独立计数的行号。RS:输入记录的分隔符。ORS:输出记录的分隔符。 NR(Number of Records) NR 表示当前处理的记录数(行号),它从1开始,处理

专业远程控制SDK嵌入,贝锐向日葵助力保利物业实现智能设备运维

为了实现更高质量的物业服务,很多物业企业在社区一线部署了大量的数字化自助式终端设备。这些设备可以为居民提供自助式的基础物业服务,有效提升了服务效率,居民满意度也得以提高。 一方面,物业企业通过引入此类设备,也逐步开始数字化转型,进而实现管理体系的迭代和降本增效;另一方面,面对数量多,分布广的智能设备,也需要企业构建对应的专业远程运维和技术支持体系,对其实施有效的管理,同时在用户自助使用出现问