Linux shell编程自动化运维,三剑客之awk原理,语法,内部变量,格式化输出,模式和动作 详细解析
wsk 简单介绍
awk分别代表其作者姓氏的第一个字母。因为它的作者是三个人,
分别是Alfred Aho 、Peter Weinberger 、 Kernighan。awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。
数据可以来自标准输入、一个或多个文件,或其它命令的输出。
它支持用户自定义函数和动态正则表达式等先进功能,
awk的处理文本和数据的方式
它逐行扫描文件,从第一行到最后一行,
寻找匹配的特定模式的行,并在这些行上进行你想要的操作。
如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),
使用工作原理
1 awk使用一行作为输入,并将这一行赋给内部变量$0,每一行也可称为一个记录,以换行符结束
2 然后,行被:(默认为空格或制表符)分解成字段(或域),每个字段存储在已编号的变量中,从$1开始,
最多达100个字段
(3)awk输出之后,将从文件中获取另一行,并将其存储在$0中,覆盖原来的内容,然后将新的字符串分隔
成字段并进行处理。该过程将持续到所有行处理完毕
语法结构
awk [options] ‘commands’ filenames (推荐)
= =options:
例如,-F 定义输入字段的分隔符,默认的分隔符或制表符(tab)
= =command(时空)
BEGIN{} END{}
BEGIN{} begin发生在行处理前(注意大写)
END{} 行处理后
{} 行处理时,读一行执行一次
示例
echo "aaa bbb ccc ddd" | awk -F":" '{print $1}'
aaa bbb ccc dddecho "aaa bbb ccc ddd" | awk '{print $1}'
aaa
内部变量
FS 输入字段分隔符(默认空格)
OFS 输出字段分隔符
RS 输入记录(行)分隔符,默认换行符
ORS 输出记录(行)分隔符,默认换行符
FNR 多文件独立编号
NR 多文件汇总编号
NF 显示字段总数
格式化输出
print 函数
[root@localhost ~]# date |awk ‘{print "Month: " $2 "\nYear: " $1}’ \n换行符 想输出文字,用引号
Month: 11月
Year: 2017年
printf 函数
%s 字符类型
%d 数值类型
%f 浮点型,可以定义保留
占15字符
- 表示左对齐,默认是右对齐
printf 默认不会在行尾自动换行,加\n
, 逗号,输出字段分隔符
[root@localhost ~]# awk -F: '{printf "%-10s %-10s %-15s\n", $1,$2,$3}' /etc/passwd | head
root x 0
bin x 1
daemon x 2
adm x 3
lp x 4
sync x 5
shutdown x 6
halt x 7
mail x 8
operator x 11
这是由于xmind的对齐导致的。
模式(正则表达)和动作
概念
模式:可以是条件测试,正则,复合语句
动作:可以是打印,计算等任何awk语句都由模式和动作组成。模式部分决定动作语句何时触发及触发事件。
如果省略模式部分,动作将时刻保持执行状态。每一行都会有动作。
模式可以是任何条件语句或复合语句或正则表达式。有模式的话,就是对模式对应的行进行动作。
字符串比较
#awk ‘/^root/’ /etc/passwd
#awk ‘$0 ~ /^root/’ /etc/passwd
#awk ‘$0!~/^root/’ /etc/passwd
#awk -F: ‘$1 ~ /^root/’ /etc/passwd
数值比较
目的
比较表达式采用对文本进行比较,只有当条件为真,才执行指定的动作。比较表达式使用关系运算符,
用于比较数字与字符串。
关系运算符
语法
运算符 含义 示例
< 小于 x<y
<= 小于或等于 x<=y
== 等于 x==y
!= 不等于 x!=y
= 大于等于 x>=y
> 大于 x>y
示例
# awk -F: '$3 == 0' /etc/passwd
# awk -F: '$3 == 1' /etc/passwd
# awk -F: '$3 < 10' /etc/passwd
== 也可以用于字符串判断
# awk -F: '$7 == "/bin/bash"' /etc/passwd
# awk -F: '$1 == "alice"' /etc/passwd
算术 运算
语法
+ - * / %(模) ^次方(2^3) 示例
# awk -F: '$3 * 10 > 500' /etc/passwd
多条件
逻辑操作符和复合模式
语法
&& 逻辑与 a&&b
|| 逻辑或 a||b
! 逻辑非 !a
学员练习
#awk -F: '$1~/root/ && $3<=15' /etc/passwd
#awk -F: '$1~/root/ || $3<=15' /etc/passwd
#awk -F: '!($1~/root/ || $3<=15)' /etc/passwd
范围模式
语法
awk ‘/从哪里/,/到哪里/’ filename
练习
# awk -F: '/adm/,/lpd/' /etc/passwd
从adm到ldp,显示出来,注意避免匹配重复的字段。
Linux shell编程自动化运维,三剑客之awk原理,语法,内部变量,格式化输出,模式和动作 详细解析相关推荐
- linux 【完结篇】第六章 shell编程及自动化运维--三剑客
linux 第六章 shell编程及自动化运维–三剑客 一.正则表达式 1.前言 名词解释: 正则表达式是一种字符模式,用于在查找过程中匹配指定的字符.在大多数程序里,正则表达式都被置于2个正斜杠之间 ...
- python linux系统管理与自动化运维_《Python Linux系统管理与自动化运维》赖明星著【摘要 书评 在线阅读】-苏宁易购图书...
商品参数 作者: 赖明星著 出版社:机械工业出版社 出版时间:2017-09-01 版次:1 开本:16开 装帧:平装 ISBN:9787111578659 版权提供:机械工业出版社 基本信息 商品名 ...
- shell编程与运维
shell编程与运维 一.Shell脚本概述 通过shell中的各种命令,开发者和运维人员可以对服务器进行维护工作. 但每次都手动输入命令,工作效率太低,而且很容易出错,尤其是需要维护大量服务器时. ...
- python与linux系统运维_《Python Linux系统管理与自动化运维》碎碎念
在此记录学习<Python Linux系统管理与自动化运维>的过程 感觉碎碎念全放在一篇文章里编辑时太乱,于2020年12月16日重新分开整理. 2020年12月13日,看了一下需要学习的 ...
- Python Linux系统管理与自动化运维之深入浅出Ansible(一)
Ansible维护模式通常由控制机和被管理机组成.因为Ansible的特性不像其他运维工具那样需要在被监控的目标上安装agent,所以我们的侧重点只需要放在安装了Ansible的服务器上(当然用于实验 ...
- python linux系统管理与自动化运维_Python Linux系统管理与自动化运维
Py't'hon语言与Linux系统管理 Py't'hon生态工具 打造命令行工具 文本处理 Linux系统管理 使用python监控Linux系统 文档与报告 网络 Python自动化部署 深入浅出 ...
- Linux笔记:自动化运维之常用模块psutil、IPy、dnspython
常用模块 psutil 用它来获取系统信息 IPy 高效处理ip地址相关的功能 dnspython 实现是dns的服务监控 可以实现域名解析,对域名的A记录,NS记录进行相应的查询等 解析结果的校验 ...
- Linux安装ansible自动化运维工具
- linux软件工程师_运维工程师打怪升级之路
前不久,有一些读者朋友跟我聊到关于 Linux 运维方向的问题,不知道自己该学什么?怎么学?甚至对自己今后的职业规划发展方向,都没有明确.这也就充分说明了自己适合做什么方向,这个领域究竟适不适合自己去 ...
最新文章
- dbvis 数据库工具:数据库驱动集合包获取,dbvis数据库工具安装驱动实例演示
- 来来来!2021最新Java面经分享
- imagemagick, imagick和magickwand编译安装
- 多台web服务器之间共享session
- java递归遍历文件夹_java递归遍历获取目录下所有文件
- pythonjson构建二维数组_在Python中从JSON构建表
- alias 为命令定义别名、unalias删除别名
- SitePoint播客#76:邪恶的WordPress主题
- 第16届全国大学生智能汽车竞赛——百度智慧交通赛项技术方案公开
- 电商数仓:用户行为数据仓库(一)数据仓库建设和技术选型
- Android开发笔记(序)
- python rfcn.py
- 已解决:excel求平均值时出现div/0 如何处理
- 台式键盘计算机,一种台式计算机键盘的制作方法
- 白侠机器人_白侠微信多群直播机器人,引领全新直播潮流
- 关于Java中的除以零的研究
- Notion的安装与使用
- python实现典型相关分析_R语言典型相关分析
- 1814 简单的字符串查找
- 【论文阅读】SteganoGAN: High Capacity Image Steganography with GANs