Linux三剑客之awk
一.简介
awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。
awk 是一种很棒的语言,它适合文本处理和报表生成,其语法较为常见,借鉴了某些语言的一些精华,如 C 语言等。在 linux 系统日常处理工作中,发挥很重要的作用,掌握了 awk将会使你的工作变的高大上。 awk 是三剑客的老大,利剑出鞘,必会不同凡响。
二.awk语法
awk【参数】【处理规则】【操纵对象】
三.参数
-F :指定文本分隔符(默认是一空格作为分割符)
以冒号为分隔符取最后一列的内容
awk -F: '{print $NF}' /etc/passwd
四.awk的生命周期
grep、sed和awk都是读一行处理一行,直至处理完成。
1、接收一行作为输入
2、把刚刚读入进来得到文本进行分解
3、使用处理规则处理文本
4、输入一行,赋值给$0,直至处理完成
5、把处理完成之后的所有的数据交给END{}来再次处理
五.awk中的预定义变量
$0 : 代表当前行
$n :表示当前第n列
NF :记录当前行的字段数
NR :用来记录行号
FS :指定文本内容分隔符(默认是空格)
OFS :指定打印分隔符(默认空格)
六.awk处理规则的执行流程
BEGIN{}
//
{}
END{}
七.awk中的函数
print:打印
printf:格式化打印
%s:字符串
%d:数字
-:左对齐
+:右对齐
15:至少占用15个字符
八.awk中的定位
①正则表达式
②比较表达式
符号 | 作用 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
~ | 正则匹配 |
!~ | 正则匹配取反 |
例1:匹配/etc/passwd中属组小于属主的行
例2:匹配/etc/passwd中以nologin结尾的行
例3:匹配结尾不包含nologin的行
③逻辑表达
符号 | 作用 |
&& | 与 |
|| | 或 |
! | 非 |
④算术表达式
符号 | 作用 |
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取余 |
例1:主加属大于2000的行
例2:找出所有的偶数行
⑤条件表达式
符号 | 作用 |
== | 等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
⑥范围表达式
⑦流程控制
只存在循环之中。 if [root@localhost ~]# awk -F: '{if($3>$4){print "大于"}else{print "小于或等于"}}' /etc/passwd if(){} if(){}else{} if(){}else if(){}else{} for [root@localhost ~]# awk -F: '{for(i=10;i>0;i--){print $0}}' /etc/passwd for(i="初始值";条件判断;游标){} while [root@localhost ~]# awk -F: '{i=1; while(i<10){print $0, i++}}' /etc/passwd while(条件判断){} 每隔5行,打印一行横线 ------------------------------------------------------------------------- [root@localhost ~]# awk -F: '{if(NR%5==0){print "----------------"}print $0}' /etc/passwd