awk 函数
awk 内建算术函数
函数 | 返回值 |
---|---|
atan2(y,x) | y/x的反正切值,定义域在-π到π之间 |
cos(x) | x的余弦值,x以弧度为单位 |
exp(x) | x的指数函数,e^x |
int(x) | x的整数部分,当x大于0时,向0取整 |
log(x) | x的自然对数(以e为底) |
rand() | 返回一个随机数r, 0 <= r < 1 |
sin(x) | x的正弦值,x以弧度为单位 |
sqrt(x) | x的平方根 |
srand(x) | x是rand()的随机数种子 |
awk 内建字符串函数
函数 | 描述 |
---|---|
gsub(r,s) | 将$0中所有出现的r替换为s,返回替换发生的次数 |
gsub(r,s,t) | 将字符串t中所有出现的r替换为s,返回替换发生的次数 |
index(s,t) | 返回字符串t在s中第一次出现的位置,如果t没有出现的话,返回0 |
length(s) | 返回s包含的字符个数 |
match(s,r) | 测试s是否包含能被r匹配的子串,返回子串的起始位置或0;设置RSTART和RLENGTH |
split(s,a) | 用FS将s分割到数组a中,返回字段的个数 |
split(s,a,fs) | 用fs分割s到数组a中, 返回字段的个数 |
sprintf(fmt,expr-list) | 根据格式字符串fmt返回格式化后的expr-list |
sub(r,s) | 将$0的最左最长的,能被r匹配的子字符串替换为s,返回替换发生的次数 |
sub(r,s,t) | 把t的最左最长的,能被r匹配的子字符串替换为s,返回替换发生的次数 |
substr(s,p) | 返回s中从位置p开始的后缀 |
substr(s,p,n) | 返回s中从位置p开始的,长度为n的子字符串 |
awk 自定义函数
除了内建函数,awk还支持用户自定义函数,自定义的函数具有如下形式
function name(parameter-list){
statements
}
函数体可能包含一个return语句,用于将执行流返回至调用函数,返回时可以带有一个值,它的形式为
return expression
expression 和 reture都是可选的, 如果没有为return语句提供表达式,或者最后执行的不是return,那么返回值就是未定义的
几点说明
- 调用用函数时, 函数名和左括号之间不能留有空白。
- 函数被调用时,参数除了数组都是“按值传递”的,参数时数组时是“按引用传递”的。
- 在函数体内部除了参数时局部变量,其余的变量都是全局的。如果函数中一个变量没有出现在参数列表中,那么整个程序范围内都可以访问该变量
示例
[aidu35@aidu35 awk]$ cat countries
USSR 8649 275 Asia
Canada 3852 25 North America
China 3705 1032 Asia
USA 3615 237 North America
Brazil 3286 134 South America
India 1267 746 Asia
Mexico 762 78 North America
France 211 55 Europe
Japan 144 120 Asia
Germany 96 61 Europe
England 94 56 Europe
[aidu35@aidu35 awk]$ awk 'function max(m,n) {t +=1 ; return m > n ? m : n } {print max($2, $3), t, m}' countries
8649 1
3852 2
3705 3
3615 4
3286 5
1267 6
762 7
211 8
144 9
96 10
94 11
可以看到外面是可以访问到函数内的变量t的值的,但是访问不到参数列表中的m。
微信扫一扫,订阅我的博客动态^_^