一 . awk工具概述

awk编程语言/数据处理引擎

  • 创造者:Aho、Weinberger、Kernighan

  • 基于模式匹配检查输入文本,逐行处理并输出

  • 通常用在shell脚本中,获取指定的数据

  • 单独用时,可对文本数据做统计

命令格式解析

  • 主要用法

    格式1:前置命令 | awk [选项] '[条件]{指令}'

    格式2:awk [选项] '[条件]{指令}'  文件...

  • 常用命令选项

    -F :指定分隔符,可省略(默认空格或Tab)

二 . 使用awk提取文本

2.1 实例1 (直接过滤文件内容)

[root@client ~]# cat awktest.txt
hello the world
this is  shanghai
[root@client ~]# awk '{print $1,$3}' awktest.txt
hello world
this shanghai

2.2 实例2 (打印磁盘剩余空间)

[root@client ~]# df -h | awk '{print $4}'
可用
14G
897M
912M
903M
912M
0
836M
183M
183M

2.3 实例3 (输出passwd文件中以分号分隔的第1、7个字段,显示的不同字段之间以逗号隔开)

[root@client ~]# awk -F: '{print $1,$7}' /etc/passwd
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
... ...

2.4 实例4 (awk的print指令不仅可以打印变量,还可以打印常量)

[root@svr5 ~]# awk -F: '{print $1,"的解释器:",$7}' /etc/passwd
[root@svr5 ~]# awk -F: '{print $1,"的解释器:",$7}' /etc/passwd
root 的解释器: /bin/bash
bin 的解释器: /sbin/nologin
… …

2.5 实例5 (提取网卡信息中RX bytes与TX bytes)

[root@client ~]# ifconfig ens33 | awk '/RX p/{print $5}'
85570
[root@client ~]# ifconfig ens33 | awk '/TX p/{print $5}'
94377

三 . awk过滤的时机

  • 在所有行前处理,BEGIN{ }

    读入第一行文本之前执行

    一般用来初始化操作

  • 逐行处理,{ }

    逐行读入文本执行相应的处理

    是最常见的编辑指令块

  • 在所有行后处理,END{ }

    处理完最后一行文本之后执行

    一般用来输出处理结果

3.1  实例1

[root@client ~]# awk 'BEGIN {a=35;print a+12}'
47

3.2  实例2 (统计系统中使用bash作为登录Shell的用户总个数)

[root@client ~]# awk 'BEGIN{x=0}/bash$/{x++} END{print x}' /etc/passwd
5

四 . awk处理时机

4.1 正则表达式

实例1

[root@client ~]# awk -F: '/^ro/{print}' /etc/passwd
root:x:0:0:root:/root:/bin/bash

实例2

[root@client ~]# awk -F: '$7!~/bash$/{print $1,$7}' /etc/passwd
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
sync /bin/sync
shutdown /sbin/shutdown

4.2 数值比较

  • ==等于、!=不等于

  • >大于、>=大于或等于

  • <小于、<=小于或等于

实例1

[root@client ~]# cat awkreg.txt
abcd xx
xx
abcabcd xx
[root@client ~]# awk 'NR==2{print}' awkreg.txt      //输出第二行文本
xx
[root@client ~]# awk '$2!="xx"{print}' awkreg.txt   //输出第二列不是xx的行
xx
[root@client ~]# awk 'NF>=2{print}' awkreg.txt      //输出包含2个及以上字段的行
abcd xx
abcabcd xx

4.3 逻辑比较测试

  • && 逻辑与:期望多个条件都成立

  • || 逻辑或:只要有一个条件成立立即满足要求

实例

[root@client ~]# awk -F:'$3>=0&&$3<2{print$1,$3}' /etc/passwd  //列出UID小于2的用户信息
root 0
bin 1
[root@client ~]# awk -F:'$3==1||$3==7{print$1,$3}' /etc/passwd  //列出UID为1或7的用户信息
bin 1
halt 7

4.4 运算符

  • +、-、*、/、%

  • ++、--、+=、-=、*=、/=

实例

[root@client ~]# awk 'NR%2==1{print}' awkreg.txt
abcd xx
abcabcd xx
[root@client ~]# awk 'BEGIN{i=0}{i+=NF}END{print i}' awkreg.txt
5

五 . awk流程控制

分支结构

  • 单分支

if(条件){编辑指令}

  • 双分支

if(条件){编辑指令1}else{编辑指令2}

  • 多分支

if(条件){编辑指令1}else if(条件){编辑指令2}.. ..

else{编辑指令N}

5.1 单分支实例

[root@client ~]# awk -F: '{if($3<=1000){i++}}END{print i}' /etc/passwd  //统计/etc/passwd中UID小于等于1000的用户个数
39
[root@client ~]# awk -F: '{if($3>1000){i++}}END{print i}' /etc/passwd//统计/etc/passwd文件中UID大于1000的用户个数
4
[root@client ~]# awk -F: '{if($7~/bash$/){i++}}END{print i}'  /etc/passwd//统计/etc/passwd文件中登录Shell是“/bin/bash”的用户个数
5

5.2 双分支实例

[root@client ~]# awk -F: '{if($3<=500){i++}else{j++}}END{print i,j}' /etc/passwd//分别统计/etc/passwd文件中UID小于或等于1000、UID大于1000的用户个数
30 13
[root@client ~]# awk -F: '{if($7~/bash$/){i++}else{j++}} END{print i,j}' /etc/passwd//分别统计/etc/passwd文件中登录Shell是“/bin/bash”、 登录Shell不是“/bin/bash”的用户个数
5 38

六 . awk数组

数组的定义及使用

  • 定义数组

格式:数组名[下标]=元素值

  • 调用数组

格式:数组名[下标]

  • 遍历数组

用法:for(变量 in 数组名){print 数组名[变量]}

6.1 实例

[root@svr5 ~]# awk 'BEGIN{a[0]=11;a[1]=88;print a[1],a[0]}'
88 11
[root@svr5 ~]# awk 'BEGIN{a++;print a}'
1
[root@svr5 ~]# awk 'BEGIN{a0++;print a0}'
1
[root@svr5 ~]# awk 'BEGIN{a[0]++;print a[0]}'
1
[root@svr5 ~]# awk 'BEGIN{a[0]=00;a[1]=11;a[2]=22; for(i in a){print i,a[i]}}'
0 0
1 11
2 22

转载于:https://blog.51cto.com/11483827/2366302

linux三剑客之awk (用于个人学习以及回顾)相关推荐

  1. linux三个冒号加端口,不看绝对后悔的Linux三剑客之awk实战精讲

    一.Linux三剑客之awk命令精讲 第1章 awk基础入门 1.1 awk简介awk不仅仅时linux系统中的一个命令,而且是一种编程语言,可以用来处理数据和生成报告(excel).处理的数据可以是 ...

  2. linux三剑客之awk命令详解

    linux三剑客之awk命令详解 awk 是一个处理文本的编程语言工具,能用简短的程序处理标准输入或文件.数据排序.计算以及生成报表等等.awk工具主要用于格式化输出,可以用类似于处理表格的方式处理文 ...

  3. 利器 | 测试必会之 Linux 三剑客 ( grep / awk / sed )

    本文为霍格沃兹测试学院优秀学员课程学习系列笔记,想一起系统进阶的同学文末加群交流. Linux 给人的印象是黑乎乎的神秘窗口,文本操作和数据处理似乎没有 Windows 窗口界面直观方便.其实Linu ...

  4. Linux三剑客之awk详解

    第一篇 awk简介与表达式实例 一种名字怪异的语言 模式扫描和处理,处理数据和生成报告. awk不仅仅是linux系统中的一个命令,而且是一种编程语言:它可以用来处理数据和生成报告(excel):处理 ...

  5. Linux三剑客之一 awk

    awk:是一种优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一.这种编程及数据操作语言的最大功能取决于一个人所拥有的知识.awk命名:Alfred Aho Peter ...

  6. Linux三剑客之awk最佳实践

    笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 知识点: 记录与字段 模式匹配:模式与动作 基本的awk执行过程 awk常用内置变量(预定义变量) awk数组 a ...

  7. LINUX 三剑客之awk

    一 概述 AWK是一种处理文本文件的语言,是一个强大的文本分析工具.它是专门为文本处理设计的编程语言,也是行处理软件,通常用于扫描.过滤.统计汇总工作数量,可以来自标准输入也可以是管道或文件 20世纪 ...

  8. 深入浅出linux三剑客之awk必杀技一例

    缘起:上完第三节培训课后,同学们群内讨论氛围相当的好,那么就再给大家一点惊喜,希望大家继续加油努力,达到你们的第一阶段薪水目标. 老男孩linux培训第三节课程课前第考试三题,问题如下: 3.请执行命 ...

  9. linux三剑客之awk必杀技一例   linux命令

    []:有框表示从最开始计算(小分隔符),否则从数据开始计算, 无[] +:加号则从最开始计算,否则从数据开始计算 [] +: 加号则从最开始计算,否则从数据最开始计算 请执行命令取出linux中eth ...

最新文章

  1. gsonformat安装怎么使用_车载蓝牙充电器怎么安装使用?如何运用
  2. 新站SEO优化如何吸引搜索引擎蜘蛛的爬行?
  3. 优集品 php,从细节处着眼 优集品打造成人世界的儿童节
  4. Linux 中常见的较为复杂的命令实例
  5. 协议簇:TCP 解析:TCP 数据传输
  6. 基于Consul的数据库高可用架构【转】
  7. 基于JAVA+SpringMVC+Mybatis+MYSQL的漫画社区
  8. 计算机科学工程哲学学位,2020年剑桥大学硕士读多久
  9. 2020年系统分析师下午论文真题
  10. 断网会导致xml加载失败数据库失败,识别不了,mybatis官网
  11. pdf2cad v12
  12. 10种流行的Java框架
  13. 单目标跟踪、多目标跟踪、单目标跟踪发展现状、多目标跟踪发展现状
  14. ai跟随路径_AI教程:如何沿着对象的路径输入文字?
  15. 手机模型真机图片的制作——UI出图
  16. 计算机视觉岗实习面经
  17. 学习使用 Clion 第一次使用Clion开发Qt的hello world
  18. Vue-Element-admin 框架上使用 Hiprint 打印插件 一、项目介绍
  19. 【风电功率预测】麻雀算法优化BP神经网络风电功率预测【含Matlab源码 1319期】
  20. linux安装微软字体

热门文章

  1. SpringBoot启动项目时提示:Error:java: 读取***.jar时出错;
  2. Java中获取 List中最后一个元素
  3. SpringBoot+MyBatisPlus实现插入关联多表数据的接口(企业质检管理举例)
  4. 如何用redis实现分布式锁?这篇文章教你用redisson实现分布式锁,封装之后的方法更好用!
  5. flutter版本控制工具 `FVM`
  6. jpg 神经网络 手势识别_在STM32上跑神经网络做手势识别
  7. 德华安顾人寿签约神策数据,精耕数字化加速保险服务质效升级
  8. 证券业震荡,数字化智能化变革、升级与突破或是新生力量(附案例)
  9. 周五话分析 | 方法论难落地?来个量身定制版本吧(AARRR模型)
  10. 二叉搜索树的第k个结点