2021-05-12 14:32:11
awk-語法深入-使用者自定義函數
2020-06-16 17:23:48
- 自定義函數格式
awk 自定義函數獲取引數,選擇性的返回標量值,函數可以在程式的頂層任意位置定義。自定義格式為:
function name(arg1,arg2,....argn){
statement(s)
}
在自定義的函數中,指定的引數被當作區域性變數,他們會隱藏任何同名的全域性性變數。
呼叫函數的格式:
function(expr1,expr2,...)# 忽略任何返回值
result=function(expr1,expr2,...)# 將返回值儲存在變數中
自定義函數時,所有位於函數體內部且未出現在函數參數列中的變數,awk都將視之為全域性變數。
awk允許呼叫函數時,被呼叫函數中的引數比它定義時所宣告的引數還少,這樣額外的引數(既沒有被傳遞值的引數)被視為區域性變數,對於這類變數,一般將它列在自定義的函數的參數列,並且字首前置一些空白。這個額外的引數通常初始化為空字串.
eg.
funchtion add(x,y sum) // sum 就是一個區域性變數,初始化為空字串
{
sum=x+y
return sum /
}
a=add(1,2) // 傳遞的引數少於函數add()定義時的數量
printf("m: %dn",a)
- 值傳遞和地址傳遞(參照傳遞):
值傳遞是將變數的值傳給了函數的形參,變數本身並未改變,還是原來的值。
地址傳遞是將變數的地址傳遞給了函數的形參,被呼叫函數會通過變數的地址找到變數被定義的地方,進而對變數作出改動,與變數的值改變。
awk不支援取址操作,因此awk中普通變數為值傳遞,awk的陣列則預設為地址傳遞。
- 遞回呼叫
awk函數支援自己呼叫自己。
應用場景: 某些不斷執行相同邏輯的的程式.
eg. 求斐波那契數列(Fibonacci sequence)的某一項
fibonacci.awk
function fibonacci(nth)
{
if(nth ==1|| nth ==2)
return1
else
return fibonacci(nth-1)+ fibonacci(nth-2) // 遞回
}
######執行體###########################
{
n=$1 // 第一個欄位
printf(" %dth of fibonacci sequence is: %dn", n, fibonacci(n))
}
問題: 複雜度大,求第n項時需要把前n-1項都計算一遍!
解決:使用陣列,把所有求過的項儲存起來,再求新的項時,直接呼叫。
總結: print 與 printf 的區別:
print 輸出的內容後會自動換行
printf 不會自動換行,需要新增'n';還可以自定義輸出格式.
[root@web1 function]# echo -e "1n2n34n43n23"|awk '{print "Number is: " $1}'
Number is:1
Number is:2
Number is:34
Number is:43
Number is:23
[root@web1 function]# echo -e "1n2n34n43n23"|awk '{printf "Number is: " $1;} END{printf "n"}'
Number is:1Number is:2Number is:34Number is:43Number is:23
[root@web1 function]# echo -e "1n2n34n43n23"|awk '{printf "Number is: " $1 "n"}'
Number is:1
Number is:2
Number is:34
Number is:43
Number is:23
Linux常用命令之awk http://www.linuxidc.com/Linux/2016-09/135046.htm
Linux系統之文字格式化工具awk http://www.linuxidc.com/Linux/2016-02/128150.htm
AWK簡介及使用範例 http://www.linuxidc.com/Linux/2013-12/93519.htm
Linux awk文字分析工具 http://www.linuxidc.com/Linux/2015-12/126217.htm
Linux文字處理工具之awk http://www.linuxidc.com/Linux/2015-01/111437.htm
如何在Linux中使用awk命令 http://www.linuxidc.com/Linux/2014-10/107542.htm
文字分析工具-awk http://www.linuxidc.com/Linux/2014-12/110939.htm
AWK入門基礎教學 http://www.linuxidc.com/Linux/2016-12/138138.htm
使用awk格式化輸出文字 http://www.linuxidc.com/Linux/2016-04/130193.htm
本文永久更新連結地址:http://www.linuxidc.com/Linux/2017-01/139372.htm
相關文章