1.1.6 自定义函数
学习目标
这一节,我们从 基础知识、简单实践、小结 三个方面来学习。
基础知识
需求
虽然awk提供了内置的函数来实现相应的内置函数,但是有些功能场景,还是需要我们自己来设定,这就用到了awk的自定义函数功能了。
awk的函数目的,与shell的函数目的一致,都是提高代码的复用能力和功能灵活性
函数
语法格式
function 函数名(参数1, 参数2, ...)
{
函数体代码
}
注意:
函数名不能用awk的关键字信息
简单实践
实践1-简单函数实践
[root@localhost ~]# awk '
function add_func(num1, num2)
{
return num1 + num2
}
function sub_func(num1, num2)
{
if (num1 > num2)
return num1 - num2
return num2 - num1
}
BEGIN {
sum_result=add_func(10, 20)
print "两值之和为: "sum_result
sub_result=sub_func(10, 20)
print "两值之差为: "sub_result
}'
两值之和为: 30
两值之差为: 10
实践2-数据统计计算
在之前的案例基础上,进行统计运算每个学生的总分,每个班级的课程总分
[root@localhost ~]# awk '
function head_func() {
printf "---------------------------\n|%-3s|%2s|%2s|%2s|%2s|\n---------------------------\n","姓名","语文","数学","历史","总分"
}
function body_func(arg1, arg2, arg3, arg4,arg5){
printf "|%-3s|%4d|%4d|%4d|%4d|\n",arg1,arg2,arg3,arg4,arg5
}
function tail_func(arg1, arg2, arg3, arg4,arg5){
printf "---------------------------\n|%-3s|%4d|%4d|%4d|%4d|\n---------------------------\n学生总数总: %2d\n","合计",arg1,arg2,arg3,arg4,arg5
}
BEGIN {
head_func()
yu=0;shu=0;li=0;total
}{
yu=$2+yu;shu=$3+shu;li=$4+li;total=$2+$3+$4
body_func($1,$2,$3,$4,$2+$3+$4)
}END{
tail_func(yu,shu,li,total,NR)
}' course_scores.txt
---------------------------
|姓名 |语文|数学|历史|总分|
---------------------------
|张三 | 100| 56| 99| 255|
|李四 | 90| 68| 89| 247|
|王五 | 50| 78| 67| 195|
|赵六 | 80| 99| 89| 268|
---------------------------
|合计 | 320| 301| 344| 268|
---------------------------
学生总数总: 4