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面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值