Shell脚本⑦awk

目录

一.awk概述

1.awk介绍

2.基本格式

3.工作原理

4.常见的内建变量

二.awk基本操作

1.打印文本内容

(1)打印磁盘使用情况

(2)打印字符串

(3)打印字符串确定文件有多少行

2.根据$n以及NR提取字段

3.根据选项指定分隔符(-F)

(1)打印所有用户名

(2)打印多列内容

(3)打印磁盘已经使用情况(去除%)

(4)取出文本中的IP地址及时间

(5)取出文本中的主机并返回

4.根据关键字提取所在行

(1)提取以root开头的行

(2)提取root所在行

(3)提取nologin结尾的行

5.使用BEGIN输入包含指定字符

6.FS:指定每行文本的字段分隔符,默认为空格或制表符,与-F相同

7.NF:处理当前行的整行内容

(1)当前处理行的字段个数

(2)打印出每行最后一个字段

(3)打印出每行倒数第二字段

8.NR:当前处理行的行号

(1)当前处理行的行号

(2)NR==n代表行号等于什么

(3)NR%2==0取偶数行

(4)NR%2==1取奇数行

(5)NR==1,NR==4取区间行

(6)取UID数值范围$n>1000

三.试题练习

1.统计/etc/fstab文件中每个文件系统类型出现的次数

2. 统计/etc/fstab文件中每个单词出现的次数

​编辑

3.将某日志文件访问用户的IP地址,在第三列冒号隔开,统计出访问量前十的IP地址

4.提取出字符串Yd$C@M05MB%9&Bdh7dq+YVixp3vpw中的所有数字


一.awk概述

1.awk介绍

awk:Aho, Weinberger, Kernighan,报告生成器,格式化文本输出,GNU/Linux发布的AWK目前由自由软件基金会(FSF)进行开发和维护,通常也称它为 GNU AWK

2.基本格式

awk [选项] ‘模式条件{操作}’ 文件1 文件2...
awk -f|-v 脚本文件 文件1 文件.....

3.工作原理

前面提到 sed 命令常用于一整行的处理,而 awk 比较倾向于将一行分成多个“字段”然后再进行处理,且默认情况下字段的分隔符为空格或 tab 键。awk 执行结果可以通过 print 的功能将字段数据打印显示。

4.常见的内建变量

FS列分隔符。指定每行文本的字段分隔符,默认为空格或制表位。与“-F”作用相同
NF当前处理的行的字段个数
NR当前处理的行的行号
$0当前处理的行的整行内容
$n当前处理行的第n个字段
FILENAME被处理的文件名
RS行分隔符
$NF最后一段
$(NF-1)倒数第二段

二.awk基本操作

1.打印文本内容

  • awk可以将自动将多个空格压缩成一个空格

  • 打印字符串需要加双引号

(1)打印磁盘使用情况
df |awk '{print $5}'

(2)打印字符串
awk '{print "hello"}'

(3)打印字符串确定文件有多少行
awk '{print "hello"}' /etc/fstab awk '{print "hello"}' /etc/fstab |wc -lcat /etc/fstab |wc -l

2.根据$n以及NR提取字段

ifconfig ens33|sed -n '2p'|awk '{print $2}'ifconfig ens33 |awk 'NR==2{print $2}'

注意:$n代表提取第几列

3.根据选项指定分隔符(-F)

(1)打印所有用户名
cat /etc/passwd|awk -F":" '{print $1}'
或
cat /etc/passwd|awk -F: '{print $1}'

(2)打印多列内容
cat /etc/passwd|awk -F":" '{print $1,$2}'cat /etc/passwd|awk -F":" '{print $1":"$2}'cat /etc/passwd|awk -F":" '{print $1"+"$2}'

(3)打印磁盘已经使用情况(去除%)
#使用两条awk命令
df|awk '{print $5}'|awk -F% '{print $1}'#使用一次awk命令
df|awk -F"[ %]+" '{print $5}'##也可以使用( |%)代表或者
df|awk -F"( |%)+" '{print $5}'

(4)取出文本中的IP地址及时间
##文本内容##
vim test.txt 58.87.87.99 - - [09/Jun/2020:03:42:43 +0800] "POST /wp-cron.php?
doing_wp_cron=1591645363.2316548824310302734375 HTTP/1.1" ""sendfileon
128.14.209.154 - - [09/Jun/2020:03:42:43 +0800] "GET / HTTP/1.1" ""sendfileon
64.90.40.100 - - [09/Jun/2020:03:43:11 +0800] "GET /wp-login.php HTTP/1.1" ""sendfileo##提取##
cat test.txt |sed '2d'|awk -F"[[ ]"  '{print $5"\t"$1}'

(5)取出文本中的主机并返回
##文本内容##
vim host.txt 1 www.kgc.com
2 mail.kgc.com
3 ftp.kgc.com
4 linux.kgc.com
5 blog.kgc.com##提取##
cat host.txt |awk -F "[. ]" '{print $2}' >>host.txt

4.根据关键字提取所在行

(1)提取以root开头的行
cat /etc/passwd |awk -F":" '/^root/{print}' 

(2)提取root所在行
cat /etc/passwd |awk -F: '/root/{print}'

(3)提取nologin结尾的行
cat /etc/passwd |awk -F":" '/nologin$/{print}' ##如果提取/sbin/nologin,则需要\转义/
cat /etc/passwd |awk -F":" '/\/sbin\/nologin$/{print}' 

5.使用BEGIN输入包含指定字符

  • BEGIN模式表示,在处理指定的文本之前,需要先执行BEGIN模式中指定的动作;

  • awk再处理指定的文本,之后再执行END模式中指定的动作;

  • END{ } 语句块中,往往会放入打印结果等语句。

#先定义变量x,表示执行多少次
awk 'BEGIN {x=0};/\/bin\/bash$/;{x++};END{print x}' /etc/passwd

6.FS:指定每行文本的字段分隔符,默认为空格或制表符,与-F相同

7.NF:处理当前行的整行内容

(1)当前处理行的字段个数

(2)打印出每行最后一个字段
cat /etc/passwd |awk -F: '{print $NF}'

(3)打印出每行倒数第二字段
cat /etc/passwd |awk -F: '{print $(NF-1)}'

df|awk '{print $(NF-1)}'

8.NR:当前处理行的行号

(1)当前处理行的行号
#NR写在后面则在后面显示行号
#awk  -F: '{print $1,NR}' /etc/passwd
root 1
bin 2
daemon 3
adm 4
lp 5
sync 6
shutdown 7
halt 8#可以用制表符
awk  -F: '{print $1"\t"NR}' /etc/passwd
root	1
bin  	2
daemon	3
adm  	4
lp	    5#NR写在前面则在前面显示行号
awk  -F: '{print NR"\t"$1}' /etc/passwd
1	root
2	bin
3	daemon
4	adm
5	lp

(2)NR==n代表行号等于什么
awk -F: 'NR==2 {print $1}' /etc/passwd

(3)NR%2==0取偶数行
awk -F: 'NR%2==0 {print $1}' /etc/passwd

(4)NR%2==1取奇数行
awk -F: 'NR%2==1 {print $1}' /etc/passwd

(5)NR==1,NR==4取区间行
awk -F: 'NR==1,NR==4 {print $1}' /etc/passwd

(6)取UID数值范围$n>1000
#取uid大于1000的行
awk -F: '$3>1000 {print}' /etc/passwd#取uid大于等于1000的行
awk -F: '$3>=1000 {print}' /etc/passwd

三.试题练习

1.统计/etc/fstab文件中每个文件系统类型出现的次数

cat /etc/fstab |awk '/^[^#]/{print}'|awk '{print $3}'|sort |uniq -c 

2. 统计/etc/fstab文件中每个单词出现的次数

grep -Eo "\b[[:alpha:]]+\b" /etc/fstab |sort|uniq -c|sort

3.将某日志文件访问用户的IP地址,在第三列冒号隔开,统计出访问量前十的IP地址

cat log.txt |awk -F: '{print $3}' |sort |uniq -c |sort -rn |head

4.提取出字符串Yd$C@M05MB%9&Bdh7dq+YVixp3vpw中的所有数字

echo "Yd$C@M05MB%9&Bdh7dq+YVixp3vpw"|grep -E -o "[0-9]+"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/656323.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实战教程:如何用Spring Boot和MySQL存储共享单车数据

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

【经典项目】Java入门,实现斗地主小游戏

一、需求分析 实现斗地主游戏可以涉及以下几个关键步骤和思路: 游戏规则定义:首先,你需要明确斗地主游戏的规则,包括牌的花色和大小、玩家数量、发牌顺序、出牌规则、胜利条件等。 牌的表示和初始化:定义一套扑克牌的…

第六讲_JavaScript原型

JavaScript原型 1. 原型的概念2. 原型继承2.1 原型链 3. class类的原型对象 1. 原型的概念 原型是 JavaScript 对象相互继承特性的机制。 每个函数都有一个 prototype 属性,这个属性指向一个对象,这个对象称为原型对象。每个对象都有一个 [[Prototype]…

网络原理-TCP/IP(1)

应用层 我们之前编写完了基本的java socket, 要知道,我们之前所写的所有代码都在应用层中,都是为了完成某项业务,如翻译等.关于应用层,后面会有专门的讲解,在此处先讲一下基础知识. 应用层对应着应用程序,是程序员打交道最多的一层,调用系统提供的网络api写出的代码都是应用层…

纯html+js+css个人博客

首页 <!DOCTYPE HTML> <html> <head> <title>博客</title> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> <meta name"viewport" content"widthdevice-width, initial-sca…

TOP100 矩阵

1.73. 矩阵置零 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 提示&#xff1a; m matrix.lengthn matrix[0].length1 < m, n < 200-2^31 < matrix[i][j] < 2^31 - 1 思路&#xf…

SeaTunnel Web安装 一把成

安装相关jar包&#xff0c;以及SeaTunnel 和Web 打成的包&#xff0c;可以直接使用&#xff0c;但是需要安装MySQL客户端的分享&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1qrt1RAX38SgIpNklbQJ7pA 提取码&#xff1a;0kmf 1. 环境准备 环境名称版本系统环境C…

使用EasyPOI模板导出Execl表格(含有图片)

这是生成的文件效果 一、导入依赖 <!--easypoi--><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.2.0</version></dependency><dependency><groupId>cn.aft…

零、环境搭建

之前一直玩python的&#xff0c;由于工作需要C版的opencv&#xff0c;故借此寒假闲暇时间&#xff0c;进行简单了解学习。 主要用到的IDE是Visual Studio和OpenCV 一、Visual Studio下载安装 我这里没找到之前的2017版本&#xff0c;就拿目前最新的2023社区版下载&#xff1a…

30款跨平台开发方案,总有个一个适合你!

1、Qt FluentUI CEF 可以覆盖所有需求 2、.NET Avalonia(SukiUI) CEF 可以覆盖所有需求 3、.NET DevExpress跨平台产品 CEF 可以覆盖所有需求 4、JavaFx(Swing) flatlaf WebView 可以覆盖所有需求 5、Java Qt &#xff08;qtjambi&#xff09; CEF 可以覆盖所有需…

C++对象模型和this指针,const修饰成员函数详解

目录 1.成员变量和成员函数分开存储 2.this指针 1.this指针概念 ​编辑 2.this指针用途 3.空指针访问成员函数 ​编辑 4.const修饰成员函数 mutable声明 1.成员变量和成员函数分开存储 空对象占用内存空间为1字节&#xff0c;这样是为了区分不同的空对象占内存的位置 …

【学习笔记】Vue3源码解析:第一部分-实现vue3环境搭建

课程地址&#xff1a;【已完结】全网最详细Vue3源码解析&#xff01;&#xff08;一行行带你手写Vue3源码&#xff09; 第一部分&#xff1a;实现vue3环境搭建&#xff08;对应课程的第1-3节&#xff09; VUE2与VUE3的对比&#xff1a; 也即vue2的痛点&#xff1a; 对TypeSc…

微信小程序遮罩层滚动穿透的问题

常见的布局 外层一个遮罩层 里面一层是弹窗以及内容 这里还是个textarea 滚动到底的时候 底部的遮罩层也跟着滚动了 发生滚动穿透 处理方法是添加 <page-meta page-style"{{ showPolish ? overflow: hidden; : }}" /> page-meta必须在第一个节点

sv program module

为了避免races&#xff0c;在验证中引入program&#xff1b; Similarities between program and module block A program block can instantiate another program block in the way how the module is instantiated another module block.Both can have no or more inputs, …

【竞技宝jjb.lol】LOL:经典大龙毁一生 WE鏖战三局力克FPX

北京时间2024年1月30日&#xff0c;英雄联盟LPL2024春季赛在昨天迎来第二周首个比赛日&#xff0c;本日首场比赛由WE对阵FPX。本场比赛双方前两局战至1-1平&#xff0c;决胜局FPX一度建立不小的经济优势&#xff0c;然而太过冒险的打大龙决策最终让其功亏一篑&#xff0c;WE鏖战…

快速入门存内计算—助力人工智能加速深度学习模型的训练和推理

存内计算&#xff1a;提高计算性能和能效的新技术 传统的计算机架构是将数据存储在存储器中&#xff0c;然后将数据传输到计算单元进行处理。这种架构存在一个性能瓶颈&#xff0c;即数据传输延迟。存内计算通过将计算单元集成到存储器中&#xff0c;消除了数据传输延迟&#…

element -table,多行或列合并

需求:后端返回的表格数据,如果某列值一样,前端表格样式需要合并他们,需要合并的列的行数未知(所以需要有数据后遍历后端数据对需要合并的属性进行计数)即动态遍历表格合并 效果 - 重点方法;table自带的:span-method="objectSpanMethod"方法 代码环境:vue2 ,…

顺序表的奥秘:高效数据存储与检索

&#x1f37f;顺序表 &#x1f9c0;1、顺序表的实现&#x1f365;1.1 创建顺序表类&#x1f365;1.2 插入操作&#x1f365;1.3 查找操作&#x1f365;1.4 删除操作&#x1f365;1.5 清空操作 &#x1f9c0;2、ArrayList的说明&#x1f9c0;3、ArrayList使用&#x1f365;3.1 A…

app广告变现|如何提升app广告点击率?

提升app内的广告点击率&#xff08;CTR&#xff09;可以增加广告收入&#xff0c;而对广告主来说&#xff0c;广告点击率下降会直接影响广告主的投资回报率&#xff0c;因此&#xff0c;如何提升广告点击率&#xff0c;对app运营来说是一项重要的工作。 AdSet官网 | 聚合SDK广…

分类预测 | Matlab实现SCN-Adaboost随机配置网络模型SCN的Adaboost数据分类预测/故障识别

分类预测 | Matlab实现SCN-Adaboost随机配置网络模型SCN的Adaboost数据分类预测/故障识别 目录 分类预测 | Matlab实现SCN-Adaboost随机配置网络模型SCN的Adaboost数据分类预测/故障识别分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现SCN-Adaboost随机配置网…