【译】 AWK教程指南 附录C-AWK的内建函数
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的内建函数的更多相关文章
- 【译】 AWK教程指南 附录D-AWK的内置变量
因内置变量的个数不多,此处按其相关性分类说明,并未按其字母顺序排列. ARGC ARGC表示命令行上除了选项 -F, -v, -f 及其所对应的参数之外的所有参数的个数.若将"awk程序&q ...
- 【译】 AWK教程指南 附录B-Actions
Actions 是由下列指令(statement)所组成: 表达式 ( 函数调用,赋值...) print 表达式列表 printf( 格式化字符串, 表达式列表) if( 表达式 ) 语句 [els ...
- 【译】 AWK教程指南 附录E-正则表达式
为什么要使用正则表达式 UNIX 中提供了许多 指令 和 tools,它们具有在文件中 查找(Search)字串或替换(Replace)字串 的功能.像 grep, vi , sed, awk,... ...
- 【译】 AWK教程指南 附录A-Patterns
awk 通过判断 Pattern 的值来决定是否执行其后所对应的Actions.这里列出几种常见的Pattern: A.1 BEGIN BEGIN 为 awk 的保留字,是一种特殊的 Pattern. ...
- 【译】 AWK教程指南 6在AWK程序中使用Shell命令
awk程序中允许调用Shell指令,并提供管道解决awk与系统间数据传递的问题.所以awk很容易使用系统资源,读者可利用这个特点来编写某些适用的系统工具. 范例:写一个awk程序来打印出线上人数. 将 ...
- 【译】 AWK教程指南 1前言
前面的话: 这几天写了一个程序,在同一个目录里生成了很多文件,需要统计其中部分文件的总大小,发现经常用到的ls.du等命令都无济于事,我甚至都想到了最笨的方法,写一个脚本:mkdir一个新目录,把要统 ...
- 【译】 AWK教程指南
前面的话: 这几天写了一个程序,在同一个目录里生成了很多文件,需要统计其中部分文件的总大小,发现经常用到的ls.du等命令都无济于事,我甚至都想到了最笨的方法,写一个脚本:mkdir一个新目录,把要统 ...
- 【译】 AWK教程指南 10编写可与用户交互的AWK程序
执行awk程序时,awk会自动从文件中读取数据来进行处理,直到文件结束.只要将awk读取数据的来源改成键盘输入,便可设计与awk 交互的程序.本节将提供一个该类程序的范例. 范例:本节将编写一个英语生 ...
- 【译】 AWK教程指南 2概述
2.1 为什么用AWK 由于awk具有上述特色,在问题处理的过程中,可轻易使用awk来撰写一些小工具:这些小工具并非用来解决整个大问题,它们只扮演解决个别问题过程的某些角色,可通过Shell所提供的p ...
随机推荐
- GPS导航仪常见术语解释
摘自百度百科: 坐标(coordinate) 有2维.3维两种坐标表示,当GPS能够收到4颗及以上卫星的信号时,它能计算出本地的3维坐标:经度.纬度.高度,若只能收到3颗卫星的信号,它只能计算出2维坐 ...
- 你想建设一个能承受500万PV/每天的网站吗?服务器每秒要处理多少个请求才能应对?
你想建设一个能承受500万PV/每天的网站吗?服务器每秒要处理多少个请求才能应对? 你想建设一个能承受500万PV/每天的网站吗? 500万PV是什么概念?服务器每秒要处理多少个请求才能应对?如果计算 ...
- hdu 4712
看了大牛的解法 第一次知道可以产生随机数解题 在计算hamming距离时用了位运算 很简便 /************************************************* ...
- dijkstra,bellman-ford,floyd分析比较
http://www.cnblogs.com/mengxm-lincf/archive/2012/02/11/2346288.html 其实我一直存在疑惑是什么导致dijkstra不能处理负权图? 今 ...
- ActivePython2.7 +Firefly1.2.2+WIN7服务器搭建过程(已通过)
原地址:http://www.9miao.com/question-15-54027.html 1.ActivePython2.7 版本(内部已经包含easy_install,pywin32)2.所需 ...
- Injection Attacks-Log 注入
日志注入(也称日志文件注入) 很多应用都维护着一系列面向授权用户.通过 HTML 界面展示的日志,因而成为了攻击者的首要目标,这些攻击者试图伪装其他攻击.误导日志读者,甚至对阅读和分析日志监测应用的用 ...
- seek和tell的用法--获取文件内容大小(字节)
/*获取文件中存取的数据内容的大小(字节数) ellg() 和 tellp() 这两个成员函数不用传入参数,返回pos_type 类型的值(根据ANSI-C++ 标准) ,就是一个整数,代表当前get ...
- Git教程之使用GitHub
我们一直用GitHub作为免费的远程仓库,如果是个人的开源项目,放到GitHub上是完全没有问题的.其实GitHub还是一个开源协作社区,通过GitHub,既可以让别人参与你的开源项目,也可以参与别人 ...
- python脚本工具-2 去除扩展名后提取目录下所有文件名并保存
文件夹里有多个RM格式的视频文件,现需要把它们的文件名都提取出来,并去掉文件的扩展名,以便放到需要的网页里. 源代码: # --- picknames.py --- import os filenam ...
- Android 进程保活招式大全
目前市面上的应用,貌似除了微信和手Q都会比较担心被用户或者系统(厂商)杀死问题.本文对 Android 进程拉活进行一个总结. Android 进程拉活包括两个层面: A. 提供进程优先级,降低进程被 ...