AWK是一种模式扫描和处理语言,它处理一个或多个文件,以查看这些文件中是否含有匹配指定模式的记录,每次发现有匹配的记录就执行与模式相对应的动作,与过程式的编程语言相反,AWK是一种数据驱动语言:用户描述想要处理的数据并告诉AWK如何出来这些数据。
AWK与Sed最大的区别在于,AWK对于结构化文件的处理能力,所谓结构化文件是指划分为记录和域的文件。AWK对格式化报表的生成提供很多强大的支持。
关于AWK版本的区别:
AWK语言最初在UNIX下作为awk使用程序实现的,在大多数Linux版本中,提供的是gawk(awk的GNU实现)或者 mawk(awk的一个快速删减版)。
在大多数Linux,也可以使用awk,不多awk和gawk是等价的,因为/bin/awk会链接到gawk上去
语法:
gawk [options] [program] [file-list]
gawk [options] -f program-file [file-list]
其中:
program是用户在命令行中键入的gawk程序,program-file是写入gawk的文件名称。另外,为了防止Shell将gawk命令解释成shell命令,需要将program用单引号包含。
file-list就是用户需要处理的输入文件,如果未指定输入文件则从标准输入读取。
选项[options]:
gawk程序program
program的语法如下:
'pattern { action }'
样式pattern用于删选记录行,动作action用于对筛选出来的记录执行相应的操作。如果省略样式pattern,则用action执行文件中的所有记录,如果省略action,则显示筛选出来的记录。
一些示例:
student-info是一些学生的信息,一次是学生姓名、性别、年龄、语文成绩、数学成绩、英语成绩,每一项都是用制表符Tab隔开
1. 如果要显示出所有女生的年龄
使用命令 awk '/female/{print $1,$3}' student-info
其中模式pattern是 /female/ ,动作action是{print $1,$3} ,模式是正则表达式匹配需要用斜杠/隔开,默认的域分隔符是空格(制表符可开成是一连串的空格组成),action中的$1表示用分隔符隔开形成的第一个域
2.查看考得100分学生的姓名
3.查看语文考得100分的学生姓名
~表示匹配运算符, $4 ~ /pattern/ 表示第4个域符合pattern 的记录
!~表示不匹配运算符
4. 查看学生姓名以'M'开头的记录
脱字符(^)表示行首开头,这与正则表达式是相同的,同理也可以使用M$表示以M结尾的记录
5. 查看语文成绩大于90分的学生记录
当然,你也可以使用其他运算符进行匹配,如:<、==、<=、>=、!=
也可以使用逻辑运算,如,查找语文和英语都大于90分的学生
6.范围运算符——逗号
选出Carol到Hebe之间的所有学生记录
7.使用awk程序文件