awk学习笔记-3

来源:互联网 发布:ug编程里wcs是什么 编辑:程序博客网 时间:2024/05/15 00:45

内置函数

sub(正则表达式,替换串)sub(正则表达式,替换串,目标串)
说明:如果不指定目标串,则默认在记录中查找能够匹配正则表达式的最长且最靠左的子串,然后用替换串取代找到的子串。如果指定了目标串,就在目标串中查找并替换。
gsub(正则表达式,替换串)gsub(正则表达式,替换串,目标串)
说明:如果不指定目标串,则默认在记录中查找能够匹配正则表达式的每个子串,然后用替换串取代找到的子串。如果指定了目标串,就在目标串中查找并替换。
index(字符串,子串)
说明:index函数返回子串在字符串中第一次出现的位置。偏移量从位置1开始计算。
length(字符串)
说明:length函数返回字符串中字符的个数。如果未指定参数,则length函数返回计量中的字符个数。
substr(字符串,起始位置) substr(字符串,起始位置,子串长度)
说明:substr函数返回从字符串指定位置开始的一个子串。如果指定了子串的长度,则返回字符串的相应部分。如果指定的长度超出了字符串的实际范围,则返回其实际内容。
match(字符串,正则表达式)
说明:match函数返回正则表达式在字符串中出现的位置,如果未出现,则返回0。match函数把内置变量RSTART设为子串在字符串中的起始位置,RLENGTH则设为子串的长度。这些变量可以被substr函数用来提取相应模式的子串。
awk 'END{start=match("Good ole USA", /[A-Z]+$/);print start,RSTART,RLENGTH}' filename awk 'END{start=match("Good ole USA", /[A-Z]+$/);print substr("Good ole USA",RSTART,RLENGTH)}' filename
split(字符串,数组,字段分隔符)split(字符串,数组)
说明:split函数使用由第3个参数指定的字段分隔符,把字符串拆分成一个数组。如果没有提供第3个参数,awk将把FS的当前值作为字段分隔符。
sprintf("含有格式说明的字符串",表达式1,表达式2, ..., 表达式n) awk '{line=sprintf("%-15s %6.2f",$1,$3); print line}' filename
说明:sprintf函数返回一个指定格式的表达式。可以在sprintf函数中使用printf函数的格式规范。
int(x)
说明:int函数将舍去小数点后的所有数字,生成一个整数。int函数不执行四舍五入操作。
tolower(string)toupper(string)
说明:tolower函数返回的是一个字符串,其中所有的大写字母均已转换成小写字母,非字母字符不发生变化。类似的,tolower函数也返回字符串,不过是将所有的小写字母转换成大写字母。注意,字符串必须加双引号。
systime() awk 'BEGIN{now=systime();print now;}'
说明:systime函数将返回自1970年1月1日以来经过的时间(以秒为单位)。
strftime([format specification][,timestamp]) awk 'BEGIN{now=strftime("%D",systime());print now;}'awk 'BEGIN{now=strftime("%T");print now;}'awk 'BEGIN{now=strftime("%m/%d/%Y");print now;}'
说明:strftime函数使用C库的strftime函数对时间进行格式化,格式形式可以为%T,%D等形式,时间戳的格式和systime()函数返回值所采用的格式相同,如果不使用时间戳,则以当前的时间为默认时间。
rand()awk '{print rand()} filename
说明:rand函数生成一个大于或等于0、小于1的伪随机浮点数。每次运行程序都打印出同一组数字。可以使用srand函数为rand函数的种子设一个新值,否则,每次调用rand都只会重复出现同一数列。
srand(x)
说明:如果未指定参数,srand函数会根据当前时刻为rand函数生成一个种子。srand(x)则把x设成种子。通常,程序应该在运行过程中不断的改变x的值。
ksh和bash都能产生随机数,内嵌shell变量RANDOM可以用于这个目的。每次访问时,这个变量将产生介于0到32767范围之内的一个随机整数。
自定义函数
        脚本中凡是可以出现模式操作规则的位置都可以放置用户自定义的函数。
函数名(参数,参数,参数, ...){  语句  return 表达式(注:return语句和表达式都是可选项) }
       变量以参数值的方式传递,且仅在使用它的函数中局部有效。函数使用的只是变量的副本。数组则通过地址或引用被传递,因此,可以在函数中直接修改数组的元素。函数中的任何变量,只要不是从参数列表中传来的,就都被视为全局变量,也就是说,该变量对整个awk程序都是可见的,而且,如果它在函数中发生了改变,即在整个程序中发生了改变。在函数中提供局部变量的唯一途径就是将它们加入到参数列表中。这类参数通常放在参数列表的末端。当调用函数时,如果没有指定某个形参的值,该参数就会被初始化为空。return语句会把控制权交还给调用者,可能还会返回一个值。
0 0