Linux三剑客之awk


一.简介

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

awk 是一种很棒的语言,它适合文本处理和报表生成,其语法较为常见,借鉴了某些语言的一些精华,如 语言等。在 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

相关