2024年【shell】shell脚本实战-awk工作模式讲解,字节大神强推千页PDF学习笔记

总结

虽然面试套路众多,但对于技术面试来说,主要还是考察一个人的技术能力和沟通能力。不同类型的面试官根据自身的理解问的问题也不尽相同,没有规律可循。

上面提到的关于这些JAVA基础、三大框架、项目经验、并发编程、JVM及调优、网络、设计模式、spring+mybatis源码解读、Mysql调优、分布式监控、消息队列、分布式存储等等面试题笔记及资料

有些面试官喜欢问自己擅长的问题,比如在实际编程中遇到的或者他自己一直在琢磨的这方面的问题,还有些面试官,尤其是大厂的比如 BAT 的面试官喜欢问面试者认为自己擅长的,然后通过提问的方式深挖细节,刨根到底。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

2、关系表达式

3、组合的Pattern

4、Pattern1,Pattern2

5、BEGIN

6、END




为了说明以上各种模式,我们这里准备一个文件score.txt,以实例的方式一一进行说明,score.txt文件内容如下:



[root@ecs-c13b awk]# cat score.txt

guojing 85 92 78

zhaoyun 89 90 75

sanfeng 84 88 80

guanyu 83 78 90

liubei 86 88 79




##### []( )2\. 正则表达式



*   查询有一门课程成绩在90-99区间的学习的成绩。



[root@ecs-c13b awk]# awk ‘/9[0-9]/ {print $0}’ score.txt

guojing 85 92 78

zhaoyun 89 90 75

guanyu 83 78 90




以上指令查询有一门课成绩在`[90-99]`区间的学生的成绩信息,`/9[0-9]/`部分即为**awk**程序指令中的**Pattern**,这里Pattern的类型为正则表达式。



awk ‘$3 ~ /9[0-9]/ {print $0}’ score.txt

zhaosan 85 92 78

lisheng 89 90 75




这条指令在上一条指令的基础上增加了限制,需要第二门课(数学)成绩在`[90-99]`区间才可与模式匹配。这里的 **~** 操作符用来表示变量是否与正则表达式匹配,如果要判断不匹配,可以使用 **!~** 操作符。



##### []( )3\. 关系表达式



awk ‘$3 >= 90 {print $0}’ score.txt

zhaosan 85 92 78

lisheng 89 90 75




可用来形成模式关系运算符包括: <(小于)、>(大于)、<=(小于或等于)、>=(大于或等于)、= =(等于)和 ! =(不等于)。



这条指令的作用也是查询数学成绩在90分以上的学生成绩信息,不过比正则表达式中的范围要大一点,这里100分也是符合模式的。



##### []( )4\. 组合的Pattern(模式)



awk ‘$3 >= 90 && $3 < 100 {print $0}’ score.txt

zhaosan 85 92 78

lisheng 89 90 75




布尔运算符 ||(或)&&(和)以及 !(不)将模式组合,组合后如果求值为真则模式匹配,否则不匹配。这里就解决了关系表达式示例中包含了100的问题。



##### []( )5\. Pattern1,Pattern2



awk ‘FNR == 2 , FNR == 4 {print $0}’ score.txt

lisheng 89 90 75

zhaoyun 84 88 80

guanyu 83 78 90




其实这个也可以归为组合的模式中,只是这种模式比较特殊,故单独列出。以,(逗号)隔开的两个Pattern指定一个范围,对从匹配第一个Pattern的记录开始,到匹配第二个Pattern结束的所有记录执行Action



##### []( )6\. BEGIN



BEGIN模块在awk读取文件之前就执行,一般用来定义我们的内置变量(预定义变量,eg:FS,RS)可以输出表头(excel表格名称)



BEGIN模式之前在实例中提到,自定义变量,给内容变量赋值等,都是使用过。需要注意的是BEGIN模式后面要结合一个**action操作块,包含在大括号内**。



awk必须在对输入文件进行任何处理前先执行BEGIN定义的action操作块。我们可以不要任何输入文件,就可以对BEGIN模块进行测试,因为awk需要先执行完BEGIN模式,才对输入文件做处理。BEGIN模式常常被用来修改内置变量ORS,RS,FS,OFS,等的值。



##### []( )a) 给文件开头添加信息



假如我们要将学生成绩表打印出来,那总得加点表头什么的吧,就可以放到BEGIN中了。



awk ‘BEGIN { print “Print student score table”} {print $0}’ score.txt

Print student score table

zhaosan 85 92 78

lisheng 89 90 75

zhaoyun 84 88 80

guanyu 83 78 90

liubei 86 88 79




##### []( )b) 取eth0的ip地址



ifconfig eth0|awk -F ‘(addr:)|(Bcast:)’ ‘NR==2{print $2}’

ifconfig eth0|awk -F ‘[: ]+’ ‘NR==2{print $4}’

ifconfig eth0|awk -F ‘[^0-9.]+’ ‘NR==2{print $2}’




也可以写成



ifconfig eth0|awk ‘BEGIN{FS=“(addr:)|(Bcast:)”} NR==2{print $2}’

ifconfig eth0|awk ‘BEGIN{FS=“[^0-9.]+”} NR==2{print $2}’

ifconfig eth0|awk ‘BEGIN{FS=“[: ]+”} NR==2{print $4}’




注意:命令行 -F 本质就是修改FS的变量。



#### []( )7\. END



END 在awk读取完所有的文件的时候,再执行END模块,一般用来输出一个结果(累加,数组的结果)也可以是和BEGIN模块类似的结尾标识信息。



###### []( )1) 给文件结尾 添加信息



awk ‘END { print “Work done”} {print $0}’ score.txt

zhaosan 85 92 78

lisheng 89 90 75

zhaoyun 84 88 80

guanyu 83 78 90

liubei 86 88 79

Work done

最后

笔者已经把面试题和答案整理成了面试专题文档

image

image

image

image

image

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

1715048820291)]

[外链图片转存中…(img-I2y87XYn-1715048820292)]

[外链图片转存中…(img-CPEgfMsw-1715048820292)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

1. 前言 这是一本awk学习指引, 其重点着重于 :  awk 适于解决哪些问题 ?  awk 常见的解题模式为何 ? 为使读者快速掌握awk解题的模式及特性, 本手册系由一些较具代表性的范例及其题解所构成; 各范例由浅入深, 彼此间相互连贯,范例中并对所使用的awk语法及指令辅以必要的说明. 有关 awk的指令, 函数,...等条列式的说明则收录于附录中, 以利读者往后撰写程序时查阅. 如此编排, 可让读者在短时间内顺畅地学会使用awk来解决问题. 建议读者循着范例上机实习, 以加深学 习效果. 读者宜先具备下列背景 : [a.] UNIX 环境下的简单操作及基本概念. 例如 : 文件编辑, 文件复制 及 管道, 输入/输出重定向 等概念 [b.] C 语言的基本语法及流程控制指令. (awk 指令并不多, 且其中之大部分与 C语言中之用法一致, 本手册中对该类指令之语法及特性 不再加以繁冗的说明, 读者若欲深究,可自行翻阅相关的 C 语言书籍) 2. awk概述 为什么使用awk awk 是一种程序语言. 它具有一般程序语言常见的功能. 因awk语言具有某些特点, 如 : 使用直译器(Interpreter)不需先行编译; 变量无类型之分 (Typeless), 可使用文字当数组的下标(Associative Array)...等特色. 因此, 使用awk撰写程序比起 使用其它语言更简洁便利且节省时间. awk还具有一些内建功能, 使得awk擅于处理具数据行 (Record), 字段(Field)型态的资料; 此外, awk内建有pipe的功能, 可将处理中的数据传送给外部 的 Shell命令加以处理, 再将Shell命令处理后的数据传回awk程序, 这个特点也使得awk程序很 容易使用系统资源. 由于awk具有上述特色, 在问题处理的过程中, 可轻易使用awk来撰写一些小工具; 这些小工具 并非用来解决整个大问题,它们只扮演解决个别问题过程的某些角色, 可藉由Shell所提供的pipe 将数据按需要传送给不同的小工具进行处理, 以解决整个大问题. 这种解题方式, 使得这些小工 具可因不同需求而被重复组合及重用(reuse); 也可藉此方式来先行测试大程序原型的可行性与 正确性, 将来若需要较高的执行速度时再用C语言来改写.这是awk最常被应用之处. 若能常常 如此处理问题, 读者可以以更高的角度来思考抽象的问题, 而不会被拘泥于细节的部份. 本手册为awk入门的学习指引, 其内容将先强调如何撰写awk程序,未列入进一步解题方式的应 用实例, 这部分将留待UNIX进阶手册中再行讨论.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值