1.3.7 自定義函數
學習目標
這一節,我們從 基礎知識、簡單實踐、小結 三個方面來學習。
基礎知識
需求
雖然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 - num2return num2 - num1
}
BEGIN {sum_result=add_func(10, 20)print "兩值之和為: "sum_resultsub_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+$4body_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
小結