AWK简介
awk是一个强大的报告生成工具,它可以根据我们输入的信息,将其格式化以后显示在屏幕上。所谓格式化就是根据我们自定义的格式将所需要的信息比较美观的显示出来。awk最初是在1977年完成的,后来又发表了一个比之前功能更加强大的awk,叫做nwak或gawk。nawk是工作在windows操作系统下的,而gawk是GNU组织开发的。他用于linux/unix系统下的。在RHEL 5.8中,awk是gawk的软链接文件。其实awk也是一门编程语言,它也支持多种控制语句,例如:if...else...、while循环、for循环以及各种操作符等等。关于更多的awk的使用我们将在下文一一详解。
AWK的工作原理
awk会读取文本中的每一行,并使用特定的分隔符将其分为N段(或者N列),然后将其显示出来(这是一种执行动作,大多数情况下为print或printf,即打印的意思)。其中每一段都可以使用一个位置变量来表示,即$1,$2,$3...。$1表示第一段,$2表示第二段,后续一次类推。其中$0表示处理的这一行的内容。
awk的语法结构
awk [option] ‘PATTERN {ACTION}‘ file1 file2 ...
常用的option:
-F :指定分隔符,默认分隔符为空白
-v var_name=#:用于在命令行中给变量赋值
在讲述awk的PATTERN和ACTION之前,我们在这里先介绍一下awk的变量以及操作符,后续介绍的PATTERN和ACTION中会使用到awk的变量以及操作符。
一、awk的变量
awk的变量分为内置变量和自定义变量
1、awk内置变量又分为记录变量和数据变量
1.1、awk内置变量之记录变量
FS: field separator,读取文件本时,所使用字段分隔符;
RS: Record separator,输入文本信息所使用的换行符;
OFS: Output Filed Separator:
ORS:Output Row Separator
1.2、awk内置变量之数据变量
NR: The number of input records,awk命令所处理的行记录数;如果有多个文件,这个数目会把处理的多个文件中的行统一计数;
例如:
NF:Number of Field,当前行记录的field(片段或列)个数,即每一行分割的总段数;
例如:
[root@mail ~]# tail -n 1 /etc/passwd | awk -F: ‘{print NF}‘
7
FNR: 与NR不同的是,FNR用于记录当前文件中总共被处理的行数;
例如:
ARGV: 该变量表示一个数组,保存awk整个命令行中的所有参数,不包括PATTERN和ACTION
例如:
其中ARGV[0]表示第一个参数即awk,ARGV[1]表示第二个参数即a.txt,ARGV[2]表示第三个参数即b.txt
ARGC: 该变量表示awk命令中参数的个数,这些参数不包括PATTERN和ACTION,但包括awk这个命令;
例如:
由于a.txt和b.txt文件中都只含2行数据,因此共四行
FILENAME: 表示awk命令所处理的当前文件的文件名称;
例如:
由于a.txt这个文件中有2行,因此就显示2行文件
ENVIRON:这是一个当前shell环境变量及其值的关联数组;关于awk的数组在下文介绍。
例如:
本文出自 “linux学习之路” 博客,请务必保留此出处http://xslwahaha.blog.51cto.com/4738972/1591213
原文地址:http://xslwahaha.blog.51cto.com/4738972/1591213