首页 > 其他分享 >awk - 运维三剑客

awk - 运维三剑客

时间:2024-06-06 19:33:31浏览次数:30  
标签:BEGIN 匹配 运维 passwd etc awk print 三剑客

基本格式

awk '
BEGIN {                    --> BEGIN 中的操作, 仅执行一次
    do sth.
}           

(pattern_1) { do sth. }    --> 从这里开始,是逐行解析文本时执行的操作,可以写多个

END {
    do sth.                --> 末尾执行的操作(仅执行一次)
}             
' FILENAME                 --> 文件名, 也可以从管道符获取输入, 只包含BEGIN时,不需要输入

变量

内置变量

$0  # 表示所有
$1, $2..  # 某列

NR  # 行号, number of row
NF  # 列总数, number of field

$NF # 最后一列

FS  # 输入列分隔符, 默认" ", 可通过"-F"指定
OFS # 输出列分隔符, 默认" ", output field sep

ORS # 输出行分隔符, 默认"\n", output row sep
RS  # 输入行分隔符, 默认"\n", 不按换行符作为行末尾

变量赋值

# 赋值. 弱类型, 赋值时未确定类型, 根据使用的方式决定类型
x = 1

# 拼接字符串
x = "1"x  # 等价: x = 1x

# 计算
x++
x+=1

使用示例

# 根据列打印
awk -F: '{print $1,$6}' /etc/passwd 

# 设置输入分隔符
awk 'BEGIN {FS=":"} {print $1,$6}' /etc/passwd
awk -F: '{print $1"="$6}' /etc/passwd

# 设置输入及输出分隔符
awk 'BEGIN {FS=":";OFS="="} {print $1,$6}' /etc/passwd

# 设置变量, 计算某一列的和
awk -F: 'BEGIN{sum=0} {sum+=$3} END{print sum}' /etc/passwd
# 支持隐式设置, 与上边等价
awk  '{sum+=$5} END{print sum}' a

格式化输出

# 替换字符串, 默认自动长度
awk 'BEGIN {printf "%s: %s\n", "foo", "bar"}'

# 设置字符串占用长度, 且右对齐
awk 'BEGIN {printf "|%10s|: |%10s|\n", "foo", "bar"}'

# 设置字符串占用长度, 且左对齐
awk 'BEGIN {printf "|%-10s|: |%-10s|\n", "foo", "bar"}'

匹配

运算符条件

  • 等于: $1==x
  • 不等于
  • 大于小于

正则条件

  • 行匹配
  • 行不匹配
  • 字段匹配
  • 字段不匹配

使用示例

# 匹配模式, 可以是通配模式,也可以是正则模式

# 行匹配, 整行匹配到这个字符, 匹配成功就打印
awk ' /xx/ { print }'

# 行不匹配
awk ' !/xx/ { print }'

# 列匹配, 精确匹配 
awk '$1 == "root" { print }' /etc/passwd
awk '$1 != "root" { print }' /etc/passwd

# 列匹配, 正则匹配
awk '$1~/^root/ { print }' /etc/passwd
awk '$1!~/^root/ { print }' /etc/passwd

# 补充# 行数大于1且小于10时打印,括号可加可不加
awk '(NR>1&&NR<10) {print}' a
# 等价(行2到行9), 这里不能加括号
awk 'NR==2,NR==9 { print }' a

if 判断

# 条件判断
# 示例是写在操作体里, 作为判断方式
# 等价于  awk '$1~/root/ {print}' /etc/passwd

awk '{ if($1~"root") print }' /etc/passwd

循环

  • 支持 for 循环和 while 循环
  • 支持 break 和continue

for 循环

# for i 循环
awk 'BEGIN {for(i=0;i<10;i++) print i}'

# 这个相当于每读一行文本,都会执行一次完整的for循环
awk '
{
    for( i = 1; i < 10; i += 2 )
        {print}
}
' /etc/passwd

# for range 循环(配合数组使用)
# 两个赋值,一个循环输出
awk 'BEGIN {arr["a"]="aaa";arr["b"]="bbb";for(x in arr) print arr[x]}'

while 循环

# 两种写法结果等价
awk 'BEGIN {
    while (i < 10) {
        print i
        i++
    }
}'

awk 'BEGIN {
	i = 1
    do {
        print i
        i++
    } while (i < 10)
}'

数组

awk 'BEGIN {
    assoc["key1"] = "val1"
    assoc["key2"] = "val2"
    for (key in assoc)
        print assoc[key];
}'

函数

函数名 示例 说明
length(str) awk 'BEGIN {a=length("aaa"); print a}' 字符串长度
printf("formatStr", ele1, ele2) awk 'BEGIN {printf("%s: %s\n", "foo", "bar")}' 格式化字符串
toupper(str) 转大写
tolower(str) 转小写
index(a, b) awk '{print index($0,"root")}' /etc/passwd 字符串a中出现字符串b的索引, 未找到为0

标签:BEGIN,匹配,运维,passwd,etc,awk,print,三剑客
From: https://www.cnblogs.com/yangkaiyue/p/18235896

相关文章

  • 智慧运维,安全无忧:体验全新的机房管理方案
    在数字化飞速发展的今天,机房作为信息时代的“心脏”,其稳定运行对于企业的业务连续性至关重要。然而,传统的机房运维模式面临着诸多挑战,如响应速度慢、故障定位难、资源浪费大等问题。智慧机房运维系统,它将以智能化、自动化的方式,为机房运维带来革命性的变革。 山海鲸可视化智慧......
  • Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
    打包与运行window版本上制作我们要把idea中的程序抽取出来作为一个独立的jar包把jar包放到服务器上服务器是长期运行的我们就能随时访问了在Maven的生命周期中选择package打包功能在资源管理器中查找java-jar文件名.jarjava-jar文件名.jar但是我们在测试里面......
  • 【运维开发的讲解】
    ......
  • 如何解决 Docker Compose文件无法拉取:解决运维技术领域的Bug :Failed to pull Docker C
    如何解决DockerCompose文件无法拉取:解决运维技术领域的Bug:FailedtopullDockerComposeYAMLfilefromGitHubrepository原创作者:猫头虎作者微信号:Libin9iOak作者公众号:猫头虎技术团队更新日期:2024年6月6日博主猫头虎的技术世界......
  • python运维怎么学
    运维工程师和开发人员一样,同属于IT从业人员,很多人认为运维人员不需要懂开发,其实不然,不懂开发的运维道路会越走越窄。现阶段,掌握一门Python开发已经成为高级运维工程师的必备技能了,那么Python运维要学习哪些内容,如何才能学好?下面给大家介绍一下:1、学习编程不止是学习语法,需要......
  • 小小白学习运维 认识运维第一天(纯理论,看懂 去理解)
    云计算是什么公有云(阿里云腾讯云华为云)+私有云(OpenStack)+混合云公有云:阿里云,腾讯云,华为云。。。——————————Iaas选云服务器配置(什么CPU内存磁盘网络运行环境)买一个叫ESC的服务器就好。——————————pass机器硬件+操作系统(Linux)U......
  • 崖山数据库-监控运维平台-YCM 配置部署详解
    准备工作:操作系统版本:[root@node10~]#uname-aLinuxnode103.10.0-1160.el7.x86_64#1SMPMonOct1916:18:59UTC2020x86_64x86_64x86_64GNU/Linux[root@node10~]#cat/etc/redhat-releaseCentOSLinuxrelease7.9.2009(Core)前提是安装完yashandb数据库:注意:安装......
  • 软件公司全套开发资料(开发&实施&运维&安全&交付)
       前言:在软件项目管理中,每个阶段都有其特定的目标和活动,确保项目的顺利进行和最终的成功交付。以下是软件项目管理各个阶段的详细资料:软件项目管理部分文档清单: 工作安排任务书,可行性分析报告,立项申请审批表,产品需求规格说明书,需求调研计划,用户需求调查单,用户需求说明......
  • Linux运维应知必会的LVS高可用负载均衡方案
    背景在业务量达到一定量的时候,往往单机的服务是会出现瓶颈的。此时最常见的方式就是通过负载均衡来进行横向扩展。其中我们最常用的软件就是Nginx。通过其反向代理的能力能够轻松实现负载均衡,当有服务出现异常,也能够自动剔除。但是负载均衡服务自身也可能出现故障,因此需要引......
  • 网络运维的重要性
    网络运维工作的重要性篇(1)【关键词】网络管理运行维护管理系统互联网时代,网络走进了生产生活的各个角落。由于运行设涞淖陨碓因和网络黑客的恶意影响,互联网自开始至今都没有经历过风平浪静的时候。网络运行维护和管理工作成为了互联网建设的重要组成部分,运维管理的水平决定......