- 论坛徽章:
- 0
|
这两天突然发现awk中的函数也挺好用!而且能把awk代码写得更加清晰,与各位分享一下!
1、awk的函数可以在引号中的任意地方定义,用{}括起即可,可以定义参数,但调用时可带可不带:
如:显示每行前两个域的较大值的函数如下:
- awk '
- function max(a,b,c)
- {
- return a>b?a:b
- }
- {print max($1,$2)}' file
复制代码
说明:显示每行前两个域的较大值,max为函数名,a、b为参数,(类似于c语言的形参)
2、函数可以直接使用awk中的变量,包括域变量($1、$2...)和自定义变量,如果是直接使用,则函数中对变量的赋值
将影响该变量的值,如果是通过参数调用的方式,则不会影响;
file的内容:400
- awk '
- function b()
- {
- print "b.in.$1="$1;
- }
- ####MAIN
- {
- v=100; y=200
- print "a.in.v="v;
- print "a.in.y="y;
- a(y)b()
- print "a.out.v="v;
- print "a.out.y="y;
- }
- function a(y)
- {
- print "(a)v="v;
- v=v+$1+y;
- y=300;
- }' file
复制代码
结果:
- a.in.v=100
- a.in.y=200
- (a)v=100
- b.in.$1=400
- a.out.v=700
- a.out.y=200
复制代码
变量v的值在函数a中发生了变化,并体现在了主函数中,但变量y是作为函数的a的形参,在函数a中对y的修改
无法体现在主函数中,对于没有参数的函数,在调用时要用(),并且可以不加分号。
3、总之,awk中的函数与shell中的函数使用有类似之处,可以变量都是全局使用,在函数中对变量的修改将同时影响主程序;
可以使程序模块化,更加简化和美观,但也有不同之处,如awk中的函数定义位置更灵活(shell中必须在调用之前定义),
参数的使用方法更灵活!
欢迎各位补充指正,我也是刚刚开始使用! |
|