linux三剑客之awk (用于个人学习以及回顾)
一 . 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 (用于个人学习以及回顾)相关推荐
- linux三个冒号加端口,不看绝对后悔的Linux三剑客之awk实战精讲
一.Linux三剑客之awk命令精讲 第1章 awk基础入门 1.1 awk简介awk不仅仅时linux系统中的一个命令,而且是一种编程语言,可以用来处理数据和生成报告(excel).处理的数据可以是 ...
- linux三剑客之awk命令详解
linux三剑客之awk命令详解 awk 是一个处理文本的编程语言工具,能用简短的程序处理标准输入或文件.数据排序.计算以及生成报表等等.awk工具主要用于格式化输出,可以用类似于处理表格的方式处理文 ...
- 利器 | 测试必会之 Linux 三剑客 ( grep / awk / sed )
本文为霍格沃兹测试学院优秀学员课程学习系列笔记,想一起系统进阶的同学文末加群交流. Linux 给人的印象是黑乎乎的神秘窗口,文本操作和数据处理似乎没有 Windows 窗口界面直观方便.其实Linu ...
- Linux三剑客之awk详解
第一篇 awk简介与表达式实例 一种名字怪异的语言 模式扫描和处理,处理数据和生成报告. awk不仅仅是linux系统中的一个命令,而且是一种编程语言:它可以用来处理数据和生成报告(excel):处理 ...
- Linux三剑客之一 awk
awk:是一种优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一.这种编程及数据操作语言的最大功能取决于一个人所拥有的知识.awk命名:Alfred Aho Peter ...
- Linux三剑客之awk最佳实践
笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 知识点: 记录与字段 模式匹配:模式与动作 基本的awk执行过程 awk常用内置变量(预定义变量) awk数组 a ...
- LINUX 三剑客之awk
一 概述 AWK是一种处理文本文件的语言,是一个强大的文本分析工具.它是专门为文本处理设计的编程语言,也是行处理软件,通常用于扫描.过滤.统计汇总工作数量,可以来自标准输入也可以是管道或文件 20世纪 ...
- 深入浅出linux三剑客之awk必杀技一例
缘起:上完第三节培训课后,同学们群内讨论氛围相当的好,那么就再给大家一点惊喜,希望大家继续加油努力,达到你们的第一阶段薪水目标. 老男孩linux培训第三节课程课前第考试三题,问题如下: 3.请执行命 ...
- linux三剑客之awk必杀技一例 linux命令
[]:有框表示从最开始计算(小分隔符),否则从数据开始计算, 无[] +:加号则从最开始计算,否则从数据开始计算 [] +: 加号则从最开始计算,否则从数据最开始计算 请执行命令取出linux中eth ...
最新文章
- gsonformat安装怎么使用_车载蓝牙充电器怎么安装使用?如何运用
- 新站SEO优化如何吸引搜索引擎蜘蛛的爬行?
- 优集品 php,从细节处着眼 优集品打造成人世界的儿童节
- Linux 中常见的较为复杂的命令实例
- 协议簇:TCP 解析:TCP 数据传输
- 基于Consul的数据库高可用架构【转】
- 基于JAVA+SpringMVC+Mybatis+MYSQL的漫画社区
- 计算机科学工程哲学学位,2020年剑桥大学硕士读多久
- 2020年系统分析师下午论文真题
- 断网会导致xml加载失败数据库失败,识别不了,mybatis官网
- pdf2cad v12
- 10种流行的Java框架
- 单目标跟踪、多目标跟踪、单目标跟踪发展现状、多目标跟踪发展现状
- ai跟随路径_AI教程:如何沿着对象的路径输入文字?
- 手机模型真机图片的制作——UI出图
- 计算机视觉岗实习面经
- 学习使用 Clion 第一次使用Clion开发Qt的hello world
- Vue-Element-admin 框架上使用 Hiprint 打印插件 一、项目介绍
- 【风电功率预测】麻雀算法优化BP神经网络风电功率预测【含Matlab源码 1319期】
- linux安装微软字体
热门文章
- SpringBoot启动项目时提示:Error:java: 读取***.jar时出错;
- Java中获取 List中最后一个元素
- SpringBoot+MyBatisPlus实现插入关联多表数据的接口(企业质检管理举例)
- 如何用redis实现分布式锁?这篇文章教你用redisson实现分布式锁,封装之后的方法更好用!
- flutter版本控制工具 `FVM`
- jpg 神经网络 手势识别_在STM32上跑神经网络做手势识别
- 德华安顾人寿签约神策数据,精耕数字化加速保险服务质效升级
- 证券业震荡,数字化智能化变革、升级与突破或是新生力量(附案例)
- 周五话分析 | 方法论难落地?来个量身定制版本吧(AARRR模型)
- 二叉搜索树的第k个结点