C.1 字串函数

  • index( 原字串, 查找的子字串 )

  若原字串中含有欲寻找的子字串,则返回该子字串在原字串中第一次出现的位置,若未曾出现该子字串则返回0。

例如:

    $ awk  'BEGIN{ print index("8-12-94","-") }'

结果打印  2

  • length( 字串 ):返回该字串的长度

例如:

    $ awk  'BEGIN { print length("John") }'

结果打印  4

  • match( 原字串, 用以查找比对的正则表达式 )

  awk会在原字串中查找合乎正则表达式的子字串,若合乎条件的子字串有多个,则以原字串中最左方的子字串为准。awk找到该字串后会依此字串为依据进行下列动作:

  1. 设定awk內建变量 RSTART、RLENGTH:

    RSTART =  合条件的子字串在原字串中的位置。

         =  0 ;若未找到合条件的子字串。

    RLENGTH = 合条件的子字串长度。

= -1 ;若未找到合条件的子字串。

  2. 返回 RSTART 的值.

例如:

    awk ' BEGIN {
      match( "banana", /(an)+/ )
      print RSTART, RLENGTH
    } '

结果打印  2 4

  • split( 原字串, 数组名称, 分隔字符 ):

  awk将依所指定的分隔字符(field separator)来分隔原字串成一个个的字段(field),并以指定的数组记录各个被分隔的字段。

例如:

    ArgLst = "5P12p89"
    split( ArgLst, Arr, /[Pp]/)

执行后:  Arr[1]=5,  Arr[2]=12,  Arr[3]=89

  • sprintf(格式字符串, 项1, 项2, ...)

  该函数的用法与 awk 或 C 的输出函数printf()相同。所不同的是sprintf()会将要求印出的结果当成一个字串返回。一般最常使用sprintf()来改变数据格式。如:x 为一数值数据,若欲将其变成一个含二位小数的数据,可执行如下指令:

    x =
    x = sprintf("%.2f",x)

执行后:  x = "28.00"

  • sub( 用于比对的正则表达式, 新字串, 原字串 )

  sub( )将原字串中第一个(最左边)合乎所指定的正则表达式的子字串改以新字串取代。

  1. 第二个参数"新字串"中可用"&"来代表"合乎条件的子字串"。承上例,执行下列指令:

    A = "a6b12anan212.45an6a"
    sub( /(an)+[-]*/, "[&]", A)
    print A

结果打印  ab12[anan212].45an6a

  2. sub()不仅可执行替换(replacement)的功用,当第二个参数为空字串("")时,sub()所执行的是"去除指定字串"的功用。

  3. 通过 sub() 与 match() 的搭配使用,可逐次取出原字串中合乎指定条件的所有子字串。

例如执行下列程序:

    awk '
    BEGIN {
      data = "p12-P34 P56-p61"
      while( match( data ,/[-]+/) > ) {
        print substr(data, RSTART, RLENGTH )
        sub(/[-]+/,"",data)
      }
    }'

结果打印:

        

  4. sub( )中第三个参数(原字串)若未指定,则其缺省值为$0。

  可用 sub( /[9-0]+/,"digital" ) 表示 sub(/[0-9]+/,"digital",$0 )

  • gsub( 用于比对的正则表达式, 将替換的新字串, 原字串 )

  这个函数与 sub()一样,同样是进行字串取代的函数。唯一不同点是

  1. gsub()会取代所有合条件的子字串。

  2. gsub()会返回被取代的子字串个数。

  请参考 sub()。

  • substr( 字串, 起始位置 [,长度] )

  返回从起始位置起,指定长度的子字串。若未指定长度,则返回起始位置到字串末尾的子字串。

例如:

    $ awk 'BEGIN { print substr("User:Wei-Lin Liu", 6)}'

结果打印  Wei-Lin Liu

C.2 数学函数

  • int(x):返回x的整数部分(去掉小数)

例如:

int(7.8)  将返回 7

int(-7.8) 将返回 -7

  • sqrt(x):返回x的平方根

例如:

sqrt(9) 将返回 3

若 x 为负数,则执行 sqrt(x) 时将造成 Run Time Error (笔者注:本机上提示的是"-nan",如下图)

  • exp(x):将返回e的x次方

例如:

exp(1) 将返回 2.71828

  • log(x):将返回x以e为底的对数值

例如:

log(exp(1))  将返回 1 (笔者注:本机上log(e)打印出来是-inf,所以用exp(1)代替e)

若 x< 0,则执行 sqrt(x)时将造成 Run Time Error(笔者注:本机上提示的是"nan",同上)

  • sin(x):x 须以弧度为单位,sin(x)将返回x的sin函数值
  • cos(x):x 须以弧度为单位,cos(x)将返回x的cos函数值
  • atan2(y,x):返回 y/x 的tan反函数的值,返回值以弧度为单位
  • rand():返回介于 0与1之间的(近似)随机数值;0 < rand()<1

  除非使用者自行指定rand()函数起始的种子,否则每次执行awk程式时,rand()函数都将使用同一个缺省的种子来产生随机数。

  • srand(x):指定以x为rand( )函数起始的种子

  若省略了x,则awk会以执行时的日期与时间为rand()函数起始的种子。

【译】 AWK教程指南 附录C-AWK的内建函数的更多相关文章

  1. 【译】 AWK教程指南 附录D-AWK的内置变量

    因内置变量的个数不多,此处按其相关性分类说明,并未按其字母顺序排列. ARGC ARGC表示命令行上除了选项 -F, -v, -f 及其所对应的参数之外的所有参数的个数.若将"awk程序&q ...

  2. 【译】 AWK教程指南 附录B-Actions

    Actions 是由下列指令(statement)所组成: 表达式 ( 函数调用,赋值...) print 表达式列表 printf( 格式化字符串, 表达式列表) if( 表达式 ) 语句 [els ...

  3. 【译】 AWK教程指南 附录E-正则表达式

    为什么要使用正则表达式 UNIX 中提供了许多 指令 和 tools,它们具有在文件中 查找(Search)字串或替换(Replace)字串 的功能.像 grep, vi , sed, awk,... ...

  4. 【译】 AWK教程指南 附录A-Patterns

    awk 通过判断 Pattern 的值来决定是否执行其后所对应的Actions.这里列出几种常见的Pattern: A.1 BEGIN BEGIN 为 awk 的保留字,是一种特殊的 Pattern. ...

  5. 【译】 AWK教程指南 6在AWK程序中使用Shell命令

    awk程序中允许调用Shell指令,并提供管道解决awk与系统间数据传递的问题.所以awk很容易使用系统资源,读者可利用这个特点来编写某些适用的系统工具. 范例:写一个awk程序来打印出线上人数. 将 ...

  6. 【译】 AWK教程指南 1前言

    前面的话: 这几天写了一个程序,在同一个目录里生成了很多文件,需要统计其中部分文件的总大小,发现经常用到的ls.du等命令都无济于事,我甚至都想到了最笨的方法,写一个脚本:mkdir一个新目录,把要统 ...

  7. 【译】 AWK教程指南

    前面的话: 这几天写了一个程序,在同一个目录里生成了很多文件,需要统计其中部分文件的总大小,发现经常用到的ls.du等命令都无济于事,我甚至都想到了最笨的方法,写一个脚本:mkdir一个新目录,把要统 ...

  8. 【译】 AWK教程指南 10编写可与用户交互的AWK程序

    执行awk程序时,awk会自动从文件中读取数据来进行处理,直到文件结束.只要将awk读取数据的来源改成键盘输入,便可设计与awk 交互的程序.本节将提供一个该类程序的范例. 范例:本节将编写一个英语生 ...

  9. 【译】 AWK教程指南 2概述

    2.1 为什么用AWK 由于awk具有上述特色,在问题处理的过程中,可轻易使用awk来撰写一些小工具:这些小工具并非用来解决整个大问题,它们只扮演解决个别问题过程的某些角色,可通过Shell所提供的p ...

随机推荐

  1. 1187: [HNOI2007]神奇游乐园 - BZOJ

    Description 经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细一看,才发现这是一个游乐场,专为旅途中疲惫的人设计. ...

  2. 【贪心】 BZOJ 3252:攻略

    3252: 攻略 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 261  Solved: 90[Submit][Status][Discuss] De ...

  3. Samza的ApplicationMaster

    当Samza ApplicationMaster启动时,它做以下的事情: 通过STREAMING_CONFIG环境变量从YARN获取配置信息(configuration) 在随机端口上 启动一个JMX ...

  4. HeadFirst设计模式之门面模式

    一. 1.The Facade Pattern provides a unifi ed interface to a set of interfaces in a subsytem. Facade d ...

  5. UNIX内核的文件数据结构 -- v 节点与 i 节点

    龙泉居士:http://hi.baidu.com/zeyu203/item/cc89cfc0f36bfecc994aa07c 内核使用三种数据结构表示打开的文件(如图),他们之间的关系决定了在文件共享 ...

  6. uva 11817 - Tunnelling the Earth

    题意:从地球上的一个点到另一个点,求两点的球面距离和直线距离之差.假定地球是正球体,半径为6371009米. #include<iostream> #include<cmath> ...

  7. 远程唤醒 N54L

    远程唤醒 N54L 我的N54L装了一块买时带的WD500G黑盘,又装了一个WD2T绿盘,存些电影歌曲什么的,当NAS用,装的WIN7系统,长时间不使用就自动关机了,每次都得按一下电源开关键,于是就研 ...

  8. 去除windows的Shift+Space 全角半角切换

    windows7下的输入法,有一个“全/半角切换”的快捷方式“Shift+Space”,我们可以通过以下方式查看到: “开始”->“控制面板”->“区域和语言”->“键盘和语言”-& ...

  9. 存储过程 务的概念 事务的特性 关于异常的处理 连接池 构JdbcUtil类

    1 存储过程    1)用当地数据库语言,写的一段业务逻辑算法,并该算法存储在客户端    2)使用存储过程需要用于CallableStatement接口,同时需要使如下SQL命令调用:{call a ...

  10. JavaScript DOM高级程序设计 2.4-try{}catch{}--我要坚持到底!

    先看一段有异常的语句 var sound = 'Roar!'; function myOrneryBeast() { this.style.color='green';//window没有style属 ...