shell编程基础【七】---awk

AWK

    简介:AWK是一个优秀的文本处理工具,同时也是一个强大的数据处理引擎。它有自己

的语法结构、流程控制

          等,可以编写AWK程序。作为文本处理来讲,用得比较多的是提取列。

 

AWK基本格式:

        awk option '{ command }' file_name

 

 

AWK调用方式:

    1、命令行

        awk -F: '{printf("%-20s%d\n", $1,$3)}' /etc/passwd

 

    2、使用-f 指定命令文件

        awk -F: -f awk.ctl /etc/passwd

 

    3、写成AWK程序,利用命令解释器调awk程序

        cat awk1.awk

                #!/bin/awk -f

                BEGIN {

                        print "starting ... "

                        FS=":"

                        u1="User Name:"

                       u2="User ID:"

                }

                {

                         printf ("%s%-20s%s%d\n",u1,$1,u2,$3);

 

                }

                END {

                        print "End"

                }       

        调用:

         ./awk1.awk /etc/passwd

 

AWK调用系统命令

        system ("command")

 

 

        #!/bin/awk -f

        BEGIN {

                system("ls")

                system("date")

        }

 

使用数据字段变量 

        $0      整行文本

        $1      第一个字段

        $n      第n个字段

 

    例:显示每个文件的名字和大小

        ll | awk '{print $8,$5}'

在程序中执行多个命令

        命令间分号分隔  

        ll | awk '{printf ("%s   ",$8);print $5}'

 

 

数据处理前运行的脚本段(BEGIN)

    例:

        [root@t176 ule]# awk 'BEGIN{print "Starting ..."} {print $1,$3}' /etc/passwd

        Starting ...

        root:x:0:0:root:/root:/bin/bash 

 

数据处理后运行的脚本段(END)

        awk 'BEGIN{print "Starting ..."} {print $1,$3} END{print "END" }' /etc/passwd

AWK 变量 

    AWK支持两种类型变量

        内置变量 

        用户自定义变量

        

    内置变量:

        FS      字段分隔符

        NF      输入文件中字段个数

        NR      已处理的记录个数

        FNR     文件记录号

        FIELDWIDTHS     字段宽度

自定义变量 

        组成字符:字母、数字、下划线,但不能以数字开头。AWK变量区分大小写

        引用变量时,与SHELL不同大部分不要在前面加 $ ,只有一些特殊的变量前加 $,如 $n  取第n个字段

 

        

    变量赋值

        命令行:        

                [root@t176 ule]# awk 'BEGIN{t="this is a test";print t}';

                this is a test

 

        命令文件中:

                命令文件中定义变量,由运行时给值

               [root@t176 ule]# cat awk2.ctl 

                BEGIN {

                        FS=":"

                }

                {

                        print $n

                }

                [root@t176 ule]# awk -f awk2.ctl n=7 /etc/passwd

 

            但以上变量取值时会存在一个问题,在BEGIN段取不到值,解决办法是在命令

行调用时加 -v 参数

                [root@t176 ule]# cat awk3.ctl 

                BEGIN {

                        print "n=",n

                        FS=":"

                }

                {

                        print $n

               }

                [root@t176 ule]# awk -f awk3.ctl n=1 pa

                n=     -- 此时n因为在begin部分,没取到值 

                root

                bin

                daemon

                rlp

                shutdown

                rialt

                news

 

                [root@t176 ule]# awk -f awk3.ctl -v n=1  pa

                n= 1

                root

                bin

                daemon

                rlp

              shutdown

                rialt

                news

        

    定义数组:

        var_name[index]=value

 

        root@t176 ule]# awk 'BEGIN{ar[1]="abc";ar[2]=123;print ar[1]}' 

        abc     

 

    删除变量 

        delete var_name[index]

   遍历数组:

        for (var in array)

        {

 

 

        }

 

        awk 'BEGIN

        {var["a"]=1;var["b"]=2;var["c"]=3;

        for (t in var) {print "t="t,"var["t"]="var[t]}}'

 

        t=a var[a]=1

        t=b var[b]=2

        t=c var[c]=3

AWK使用正则表达式

        匹配符: ~ /正则表达式模式/      ! ~ /正则表达式模式/

 

 

数学表达式和bash也有所不同

        >  

        >=

        <

        <= 

        ==

        !=

AWK的流程控制

    选择:

        if (条件) 

        {

                

        }

 

 

        if (条件)

        {

 

        }

        else

        {

 

        }    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值