Awk格式化输出/内置字符串函数/数组



一、格式化输出

 

      awk 一大主要功能就是产生报表,报表就要按照预订的格式输出,awk借鉴C,也定义了printf输出语句,它可以规定输出的格式,printf基本语法如下:

       printf(格式控制符,参数)

      由上可知 printf语句包含两部分:格式控制符,以 % 开始,描述格式规范;参数列表,比如变量名列表,与格式控制符相对应,为输出对象。示例:

           awk '{printf (“%s\t%d\n”,$2,$8)}'     输入文件

       指令中,%s$2对应,%d$8对应。

 

        格式控制符有分为printf修饰符 和格式符两种:

 

                                               printf修饰符及意义

 

               修饰符

                              意义

                   -

                            坐对齐

                width

                            域的步长

                .prec

                       小数点右边的位数

 

                                           Printf格式符及意义

 

                      格式符

                              意义

                        %c

                        ASCII字符

                        %d

                        整形数

                        %e

                        浮点数,科学记数法

                        %f

                        浮点数

                        %o

                        八进制数

                        %s

                        字符串

                        %x

                        十六进制数

 

   示例:awk '{printf(“%10.3f\n”,2009.1012)}'

      

             其中, width = 10,表示浮点数长度控制在10位;.prec = .3,表示小数点后3位。

 

我们可以总结出printf修饰符一般的形式:  %-width.prec 格式控制符

 

 

二、内置字符串函数

 

       awk 提供了强大的内置字符串函数,用于实现文本的字符串替换、查找以及分隔功能:

                     

                                                   awk字符串及意义

              函数

                           意义

         gsub(r,s)

           在输入文件中用s 替换 r           (作用于全部域 $0)

         gsub(r,s,t)

           t中用s 替换 r                       (作用于全部域 t)

         index(s,t)

           返回s中字符串第一个t的位置

         length(s)

           返回s的长度

         match(s,t)

           测试s是否包含匹配t的字符串

        (成功,返回t的首位置;失败,返回0)

         split(r,s,t)

           t上将r分成序列s(以t为分隔符,将r拆分成字符串 数组s

         sub(r,s,t)

           t中第一次出现的r替换为s

         substr(r,s)

          返回字符串r中从s开始的后缀部分

         substr(r,s,t)

          返回字符串r中从s开始长度为t的后缀部分

 

 

三、向awk脚本传递传递参数

       awk脚本内的变量可在命令中进行赋值,实现像awk脚本传递参数,格式为:

 

       awk脚本 parameter=value 输入文件

 

           变量赋值放在脚本之后,输入文件之前,= 两端不能有空格。

           awk所传递的参数可以是自定义变量,也可以是系统变量。

注意:命令行参数不能被BEGIN字段访问。

 

四、条件语句和循环语句

 

      awk 的条件语句和循环语句与C语言的语法完全相同。

      可以使用 匹配符和正则表达式作为if语句的条件。示例:

       

       ifx ~ /helo/ print x               x中匹配模式 helo,将其打印

 

五、数组

      

      awk数组的形式与C相同,但是,awk数组无需定义数组类型和大小,可以赋值后直接使用,

基本格式:

     array[index] = value

 

关联数组
  1. 关联数组是指数组的索引可以是字符串,也可以是数字。关联数组在索引和数组元素之间建立起关联,

    对每一个数组元素,awk自动维护了一对值:索引和数组元素值。关联数组的值无需以连续的地址进行存储,

    所以,关联数组即便可以通过数字作为索引,但是,该数字索引并不表示数组存储地址的信息。awk的所以数组都是关联数组,这是awk数组与其他编程语言数组的本质区别。

           字符串和数字之间是有明显差别的,例如,arry[09]arry[9]二者就不能指定到数组中相同的值。

     

    awk也特别定义了一种for循环来访问关联数组,语法形式:

                for(variable in array)

                  dosomething with array[variable]

    variable是任意指定的变量。

     

    关键字in也可以在条件表达式中判断元素是否在数组中,语法格式如下:

           indexin array

    array[index]存在,返回1,反之,返回0.  

        

split

 split(r,s,t)函数将字符串以t为分隔符,将r字符串拆分为字符串数组,并存放在s中。

       

数组形式的系统变量

awk系统变量中ARGVENVIRONARGCARGV数组中元素的个数,这一点和C相同。

ENVIRON的索引是环境变量名,可以通过环境变量名直接得到其值:

 

ENVIRON[“USER”]

ENVIRON[“OLDPWD”]

 

环境变量名要放到双引号里面。


本文完全参照           <linux shell 编程从初学到精通>    华清远见嵌入式培训中心  伍之昂等编著

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值