SHELL编程三剑客之awk详解

SHELL编程三剑客之awk详解

  awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。

awk 是一种很棒的语言,它适合文本处理和报表生成,其语法较为常见,借鉴了某些语言的一些精华,如 C 语言等。在 linux 系统日常处理工作中,发挥很重要的作用,掌握了 awk将会使你的工作变的高大上。 awk 是三剑客的老大,利剑出鞘,必会不同凡响。

1、首先我们看一下常用的cut命令的基本使用方法,cut英文意思是切,它的功能和和awk基本相同,唯一不同的是awk可以说是cut的plus版本(但不是一个厂家)。

cut -d(指定以什么为分割符) -f(指定列)   第一列

#cut -d  ‘ ’ -f  5

cut无法切割以空格为分割符的数据。

SHELL编程三剑客之awk详解_第1张图片

2、awk的基本常用写法

awk  ‘条件一{动作一}条件二{动作二} ’  文件

当然我们也可用使用管道符|awk。。。。。

3、awk的基本写法

#我们使用printf的话最后必须要加上\n换号符号,$数字是表示第几列

df -h | awk '{printf $1 "\t" $5 "\n"}'

#如果使用print的话就不需要再多写一个\n了

df -h | awk '{print $1 "\t" $5}'

#注意,为了不想让两行数据黏在一起,所以中间需要用“\t”空格符隔开。最外面的必须是单引号,而里面的\t和\n必须使用双引号。

SHELL编程三剑客之awk详解_第2张图片

4、实例

  我们想试试判断linux的根分区的使用情况,或者是某个分区的使用情况,我们怎么判断呢。

#df -h | grep sda5 | awk '{print $5}' | cut -d '%' -f 1

解释:

df -h | grep sda5是我的根分区,awk抓取第五列,也就是拿到6%这个数字,但是不想要百分号,那我们在用cut切一下,就OK了

SHELL编程三剑客之awk详解_第3张图片

5、BEGIN(实际上就是在打印结果的开始打印里面动作的一句话)

#df -h | grep sda5 | awk 'BEGIN{print "This is the use of the root partition"}{print $5}' | cut -d '%' -f 1

BEGIN的关键用法。

#awk '{FS=":"}{print $1 "\t" $3}' /etc/passwd

SHELL编程三剑客之awk详解_第4张图片

#awk 'BEGIN{FS=":"}{print $1 "\t" $3}' /etc/passwd

SHELL编程三剑客之awk详解_第5张图片

关键:我们知道awk是每次提取的时候都是先读取第一行后,才开始执行后面的动作语句,所以第一行没有被处理。这个时候就需要使用BEGIN,这个时候它就会处理所有数据。

END的用法

有BEGIN当然就有END了

#awk  'END{print"END!!!"}{print $1 "\t" $3}' /etc/passwd

#和BEGIN的用法基本相同,只不过是在处理数据动作的最后加打印而已。

SHELL编程三剑客之awk详解_第6张图片

6、关系运算符

关系运算符:

>  大于

<  小于

=   等于 #这里的等于就把结果都改成这等于后面的数值,如下图

>=  大于等于

<=   小于等于 

df -h | awk '{print $5}' |cut -d "%" -f 1 | awk '$1 >5 {print $1}'  #打印磁盘使用情况大于百分之五的

SHELL编程三剑客之awk详解_第7张图片

df -h | awk '{print $5}' |cut -d "%" -f 1 | awk '$1 <5 {print $1}' #打印磁盘使用情况小于百分之五的

SHELL编程三剑客之awk详解_第8张图片

你可能感兴趣的:(Linux运维,linux,运维,服务器)