本文主要是介绍运维——三剑客AWK(三)高级应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前两个博客学习了awk的基础用法,不过还是要多练习,时间很紧,又学习了awk的高级用法,在学习高级用法之前还是先来复习一下之前的学习内容:
awk基本格式:awk [options] 'program' file…
program:pattern{action statements;..}
pattern部分决定动作语句何时触发及触发事件
BEGIN,END
action statements对数据进行处理,放在{}内指明
print, printf
以上是基础用法,高级用法和前面讲的shell编程很相似,一起来看看
if—else控制语句
语法: if(condition){statement;…}[else statement]
if(condition1){statement1}else if(condition2){statement2} else{statement3}
示例:
还可以使用双分支结构如下:
也可以使用printf进行格式化输出如下
while循环控制语句
语法:while(condition){statement;…}
条件“真”,进入循环;条件“假”,退出循环
使用场景:
对一行内的多个字段逐一类似处理时使用
对数组中的各元素逐一处理时使用
do-while循环控制语句
语法:do {statement;…}while(condition)
意义:无论真假,至少执行一次循环体
for循环控制语句
语法:for(expr1;expr2;expr3) {statement;…}
continue语句
next:
提前结束对本行处理而直接进入下一行处理(awk自身循环)
数组
关联数组:array[index-expression]
index-expression:
(1) 可使用任意字符串;字符串要使用双引号括起来
(2) 如果某数组元素事先不存在,在引用时,awk会自动创建此元素,并将其值
初始化为“空串”
若要判断数组中是否存在某元素,要使用“index in array”格式进行遍历
数值处理:
rand():返回0和1之间一个随机数(只返回一个而且都一样
如下:连续执行多次都只输出一个随机数,而且还相同,这不是想要得到的效果
此时可以借助srand()函数先生成种子,而后再生成随机数如下:
如果想要生成两位数怎么办?往下看
虽然生成了两位数但是并不是整数
如果只想要整数可以利用int()函数 如下:
其实随机生成整数的方法还有偶RANDOM,可以随机生成一个0--32767之间的数字如:
那如果想随机生成100以内的数呢?如下
如果想取10个随机数还可以借助for循环
sub(r,s,[t]):对t字符串进行搜索r表示的模式匹配的内容,并将第一个匹配的内容替换为s
图中只替换了第一个冒号,而没有替换后面的,看着很不爽,怎么才能全部替换呢,此时可以使用另外一个函数
gsub(r,s,[t]):对t字符串进行搜索r表示的模式匹配的内容,并全部替换为s所表示的内容
操作如下:使用gsub()函数后所有的冒号都被替换了
这篇关于运维——三剑客AWK(三)高级应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!