linux中awk工具的使用(转)
add by zhj: awk很强大,它是一个简单的编程语言,国外有本专门的书介绍它的用法。《effective awk?programming》,它支持整型,字符串型,数组,变量在使用前不需要 定义,直接使用,因为每种数据类型都有默认的初始值。它还支持if/for等逻辑语句 原文:https://blog.51cto.com/13866901/2166164?tdsourcetag=s_pctim_aiomsg 运行环境:centos6 Vmware 一、awk简介 awk是一个非常好用的数据处理工具,相对于sed常常作用于一整个行的处理,awk则比较倾向于一行当中分成数个【字段】处理,因此,awk相当适合处理小型的数据数据处理。awk是一种报表生成器,就是对文件进行格式化处理的,这里的格式化不是文件系统的格式化,而是对文件内容进行各种“排版”,进而格式化显示;在linux中我们使用的是GNU awk简称gawk,并且gawk其实就是awk的链接文件,因此在系统上使用awk和gawk是一样的。 二、awk的基本用法 awk[OPTIONS]‘program‘ FILE1 FILE2 program:PATTERN{ACTION STATEMENT} program:编程语言 PATTERN:模式 ACTIONSTATEMENT:动作语句,可以是多个语句,但多个语句中间要使用分号分隔 OPTIONS:-F[] 指明输入字段分割符 ; -v VALUE 变量赋值; 举例说明: 三、变量 1、内建变量
? ?
2、自定义变量 (1)-v VALUE (变量名称区分大小写)在这里文件ceshi.txt中有多少行就显示多少行变量的值 (2)在program中自定义变量 四、awk的格式化输出 语法 printf FORNAT,item1,item2
格式符介绍:
举例说明: 五、awk的操作符
举例说明 通过df命令查看当前系统磁盘占用率,查出占用率大于等于百分之20的磁盘名称以及磁盘占用率 六、awk的控制语句
七、awk的性能测试 实验:从1加到100等于多少? (1)time?seq -s "+" 5000000 |bc (2)time awk BEGIN‘{for(i=1;i<=1000000;i++){sum+=i};print sum}‘ (3)time?awk BEGIN‘{i=1;while(i<=1000000){sum+=i;i++};print sum}‘ (4)time?for ((i=1;i<=1000000;i++));do let sum+=i; done;echo $sum 八、awk数组 数组是一个包含一系列元素的表 格式如下: ? ? ? ? ? ? ? ? ? abc[1]="libai" ? ? ? ? ? ? ? ? ? abc[2]="lihei" abc为数组名,[1][2]为数组下标,可以认为是数组的第一个元素,第二个元素,"libai""lihei"是元素的内容 举例说明: 利用数组统计每个ip地址访问量(编辑一个文件,该文件存储ip地址) 关于array[$1]++? (1)awk在读取第一行的时候,会读取这个数组,此时的数组是这样的,array["第一行的内容"]++ (2)此时该数组的值还没有定义,但后面有运算符号++,所以awk会将数字0自动赋值给array["第一行的值"]做++运算,所以得到的值为1. (3)在读到与array["第一行的内容"]相同的时候继续++运算,也就意味着,运算了多少次,就是出现了多少次。 九、awk函数 1、内键函数 (1)数值处理 rand() 返回0至1之间的一个随机数 从这张图中我们发现了一个问题,通过使用rand函数生成随机数,但是rand函数返回的值一直不变,所以我们需要配合srand函数 从这张图中我们发现生成的随机数产生了变化,但生成的随机数都是小于1的小数,如果我们想要生成整数随机数,我们可以利用int整数函数截取整数部分的值 (2)字符串函数 length([s])?返回指定的字符串的长度 举例说明 gsub(r,s[,t])基于r所表示的模式来匹配字符串t中的内容,将其所有被匹配到的内容均替换为s所表示的字符串 举例说明 sub(r,t])?基于r所表示的模式来匹配字符串t中的内容,将其第一次被匹配到的内容替换为s所表示的字符串 举例说明 split(s,a[,r])?以r为分隔符去切割字符串s,并将切割后的结果保存至a表示的数组中 举例说明 从上图中我们发现数组元素输出顺序可能与字符串中字符的顺序不同,我们可以采用下面的办法 2、用户自定义函数 函数是程序的基本组成部分,awk允许我们定义自己的函数,一个大的程序可以分为多个函数并且每个函数可以独立测试 用户自定义函数的一般格式为: function_name是用户定义函数的名称,函数名称应以字符的字母并且其余部分可以是数字,字母或下划线的任意组合,awk的保留字不能用作函数名字;函数可以接受以逗号分隔的多个参数,参数不是强制性的,我们也可以创建一个用户定义的函数不带任何参数;函数体由一个或多个awk语句组成。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |