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原理,语法,内部变量,格式化输出,模式和动作 详细解析相关推荐

  1. linux 【完结篇】第六章 shell编程及自动化运维--三剑客

    linux 第六章 shell编程及自动化运维–三剑客 一.正则表达式 1.前言 名词解释: 正则表达式是一种字符模式,用于在查找过程中匹配指定的字符.在大多数程序里,正则表达式都被置于2个正斜杠之间 ...

  2. python linux系统管理与自动化运维_《Python Linux系统管理与自动化运维》赖明星著【摘要 书评 在线阅读】-苏宁易购图书...

    商品参数 作者: 赖明星著 出版社:机械工业出版社 出版时间:2017-09-01 版次:1 开本:16开 装帧:平装 ISBN:9787111578659 版权提供:机械工业出版社 基本信息 商品名 ...

  3. shell编程与运维

    shell编程与运维 一.Shell脚本概述 通过shell中的各种命令,开发者和运维人员可以对服务器进行维护工作. 但每次都手动输入命令,工作效率太低,而且很容易出错,尤其是需要维护大量服务器时. ...

  4. python与linux系统运维_《Python Linux系统管理与自动化运维》碎碎念

    在此记录学习<Python Linux系统管理与自动化运维>的过程 感觉碎碎念全放在一篇文章里编辑时太乱,于2020年12月16日重新分开整理. 2020年12月13日,看了一下需要学习的 ...

  5. Python Linux系统管理与自动化运维之深入浅出Ansible(一)

    Ansible维护模式通常由控制机和被管理机组成.因为Ansible的特性不像其他运维工具那样需要在被监控的目标上安装agent,所以我们的侧重点只需要放在安装了Ansible的服务器上(当然用于实验 ...

  6. python linux系统管理与自动化运维_Python Linux系统管理与自动化运维

    Py't'hon语言与Linux系统管理 Py't'hon生态工具 打造命令行工具 文本处理 Linux系统管理 使用python监控Linux系统 文档与报告 网络 Python自动化部署 深入浅出 ...

  7. Linux笔记:自动化运维之常用模块psutil、IPy、dnspython

    常用模块 psutil 用它来获取系统信息 IPy 高效处理ip地址相关的功能 dnspython 实现是dns的服务监控 可以实现域名解析,对域名的A记录,NS记录进行相应的查询等 解析结果的校验 ...

  8. Linux安装ansible自动化运维工具

  9. linux软件工程师_运维工程师打怪升级之路

    前不久,有一些读者朋友跟我聊到关于 Linux 运维方向的问题,不知道自己该学什么?怎么学?甚至对自己今后的职业规划发展方向,都没有明确.这也就充分说明了自己适合做什么方向,这个领域究竟适不适合自己去 ...

最新文章

  1. dbvis 数据库工具:数据库驱动集合包获取,dbvis数据库工具安装驱动实例演示
  2. 来来来!2021最新Java面经分享
  3. imagemagick, imagick和magickwand编译安装
  4. 多台web服务器之间共享session
  5. java递归遍历文件夹_java递归遍历获取目录下所有文件
  6. pythonjson构建二维数组_在Python中从JSON构建表
  7. alias 为命令定义别名、unalias删除别名
  8. SitePoint播客#76:邪恶的WordPress主题
  9. 第16届全国大学生智能汽车竞赛——百度智慧交通赛项技术方案公开
  10. 电商数仓:用户行为数据仓库(一)数据仓库建设和技术选型
  11. Android开发笔记(序)
  12. python rfcn.py
  13. 已解决:excel求平均值时出现div/0 如何处理
  14. 台式键盘计算机,一种台式计算机键盘的制作方法
  15. 白侠机器人_白侠微信多群直播机器人,引领全新直播潮流
  16. 关于Java中的除以零的研究
  17. Notion的安装与使用
  18. python实现典型相关分析_R语言典型相关分析
  19. 1814 简单的字符串查找
  20. 【论文阅读】SteganoGAN: High Capacity Image Steganography with GANs

热门文章

  1. 美图进入沪港通、深港通名单,投资它需要了解这三个问题
  2. 人工智能很危险!?开发需谨慎?
  3. 一台Linux服务器上挂载另一台Linux服务器文件系统的方法
  4. 【底层逻辑】死囚试毒酒(改编)
  5. 移动端 UI设计尺寸(一)篇
  6. python之xlrd
  7. shell在xcode中涉及到的关键字
  8. VTK笔记——医学图像的切片提取(vtkImageReslice)
  9. 使用jigdo下载历史版本的debian镜像
  10. Zabbix的自动发现