gsub函数作用如sub,但它在整个文档中进行匹配。格式如下:
gsub (regular expression, substitution string)
gsub (regular expression, substitution string, target string)
实例:
$ awk '{ gsub(/test/, "mytest"); print }' testfile
$ awk '{ gsub(/test/, "mytest"), $1 }; print }' testfile
第一个例子在整个文档中匹配test,匹配的都被替换成mytest。
第二个例子在整个文档的第一个域中匹配,所有匹配的都被替换成mytest。
index函数返回子字符串第一次被匹配的位置,偏移量从位置1开始。格式如下:
index(string, substring)
实例:
$ awk '{ print index("test", "mytest") }' testfile
实例返回test在mytest的位置,结果应该是3。
length函数返回记录的字符数。格式如下:
length( string )
length
实例:
$ awk '{ print length( "test" ) }'
$ awk '{ print length }' testfile
第一个实例返回test字符串的长度。
第二个实例返回testfile文件中第条记录的字符数。
substr函数返回从位置1开始的子字符串,如果指定长度超过实际长度,就返回整个字符串。格式如下:
substr( string, starting position )
substr( string, starting position, length of string )
实例:
$ awk '{ print substr( "hello world", 7,11 ) }'
上例截取了world子字符串。
match函数返回在字符串中正则表达式位置的索引,如果找不到指定的正则表达式则返回0。match函数会设置内建变量rstart为字符串中子字符串的开始位置,rlength为到子字符串末尾的字符个数。substr可利于这些变量来截取字符串。函数格式如下:
match( string, regular expression )
实例:
$ awk '{start=match("this is a test",/[a-z]+$/); print start}'
$ awk '{start=match("this is a test",/[a-z]+$/); print start, rstart, rlength }'
第一个实例打印以连续小写字符结尾的开始位置,这里是11。
第二个实例还打印rstart和rlength变量,这里是11(start),11(rstart),4(rlength)。
toupper和tolower函数可用于字符串大小间的转换,该功能只在gawk中有效。格式如下:
toupper( string )
tolower( string )
实例:
$ awk '{ print toupper("test"), tolower("test") }'
split函数可按给定的分隔符把字符串分割为一个数组。如果分隔符没提供,则按当前fs值进行分割。格式如下:
split( string, array, field separator )
split( string, array )
实例:
$ awk '{ split( "20:18:00", time, ":" ); print time[2] }'
上例把时间按冒号分割到time数组内,并显示第二个数组元素18。
14.8.2. 时间函数
systime函数返回从1970年1月1日开始到当前时间(不计闰年)的整秒数。格式如下:
systime()
实例:
$ awk '{ now = systime(); print now }'
strftime函数使用c库中的strftime函数格式化时间。格式如下:
systime( [format specification][,timestamp] )
table 3. 日期和时间格式说明符
格式 描述
%a 星期几的缩写(sun)
%a 星期几的完整写法(sunday)
%b 月名的缩写(oct)
%b 月名的完整写法(october)
%c 本地日期和时间
%d 十进制日期
%d 日期 08/20/99
%e 日期,如果只有一位会补上一个空格
%h 用十进制表示24小时格式的小时
%i 用十进制表示12小时格式的小时
%j 从1月1日起一年中的第几天
%m 十进制表示的月份
%m 十进制表示的分钟
%p 12小时表示法(am/pm)
%s 十进制表示的秒
%u 十进制表示的一年中的第几个星期(星期天作为一个星期的开始)
%w 十进制表示的星期几(星期天是0)
%w 十进制表示的一年中的第几个星期(星期一作为一个星期的开始)
%x 重新设置本地日期(08/20/99)
%x 重新设置本地时间(12:00:00)
%y 两位数字表示的年(99)
%y 当前月份
%z 时区(pdt)
%% 百分号(%)
实例:
$ awk '{ now=strftime( "%d", systime() ); print now }'
$ awk '{ now=strftime("%m/%d/%y"); print now }'
14.8.3. 内建数学函数
table 4.
函数名称 返回值
atan2(x,y) y,x范围内的余切
cos(x) 余弦函数
exp(x) 求幂
int(x) 取整
log(x) 自然对数
rand() 随机数
sin(x) 正弦
sqrt(x) 平方根
srand(x) x是rand()函数的种子
int(x) 取整,过程没有舍入
rand() 产生一个大于等于0而小于1的随机数
14.8.4. 自定义函数
在awk中还可自定义函数,格式如下:
function name ( parameter, parameter, parameter, ... ) {
statements
return expression # the return statement and expression are optional
}
15. how-to
如何把一行竖排的数据转换成横排?
awk '{printf("%s,",$1)}' filename
完整版本
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论