歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> awk-語法深入-用戶自定義函數

awk-語法深入-用戶自定義函數

日期:2017/2/28 13:44:50   编辑:Linux教程

- 自定義函數格式

awk 自定義函數獲取參數,選擇性的返回標量值,函數可以在程序的頂層任意位置定義。自定義格式為:
  1. function name(arg1,arg2,....argn){
  2. statement(s)
  3. }
在自定義的函數中,指定的參數被當作局部變量,他們會隱藏任何同名的全局性變量。 調用函數的格式:
  1. function(expr1,expr2,...)# 忽略任何返回值
  2. result=function(expr1,expr2,...)# 將返回值存儲在變量中
自定義函數時,所有位於函數體內部且未出現在函數參數列表中的變量,awk都將視之為全局變量。 awk允許調用函數時,被調用函數中的參數比它定義時所聲明的參數還少,這樣額外的參數(既沒有被傳遞值的參數)被視為局部變量,對於這類變量,一般將它列在自定義的函數的參數列表,並且字首前置一些空白。這個額外的參數通常初始化為空字符串. eg.
  1. funchtion add(x,y sum) // sum 就是一個局部變量,初始化為空字符串
  2. {
  3. sum=x+y
  4. return sum /
  5. }
  6. a=add(1,2) // 傳遞的參數少於函數add()定義時的數量
  7. printf("m: %d\n",a)
- 值傳遞和地址傳遞(引用傳遞): 值傳遞是將變量的值傳給了函數的形參,變量本身並未改變,還是原來的值。 地址傳遞是將變量的地址傳遞給了函數的形參,被調用函數會通過變量的地址找到變量被定義的地方,進而對變量作出改動,與變量的值改變。 awk不支持取址操作,因此awk中普通變量為值傳遞,awk的數組則默認為地址傳遞。 - 遞歸調用 awk函數支持自己調用自己。 應用場景: 某些不斷執行相同邏輯的的程序. eg. 求斐波那契數列(Fibonacci sequence)的某一項 fibonacci.awk
  1. function fibonacci(nth)
  2. {
  3. if(nth ==1|| nth ==2)
  4. return1
  5. else
  6. return fibonacci(nth-1)+ fibonacci(nth-2) // 遞歸
  7. }
  8. ######執行體###########################
  9. {
  10. n=$1 // 第一個字段
  11. printf(" %dth of fibonacci sequence is: %d\n", n, fibonacci(n))
  12. }
  13. 問題: 復雜度大,求第n項時需要把前n-1項都計算一遍!
解決:使用數組,把所有求過的項保存起來,再求新的項時,直接調用。 總結: print 與 printf 的區別: print 輸出的內容後會自動換行 printf 不會自動換行,需要添加'\n';還可以自定義輸出格式.
  1. [root@web1 function]# echo -e "1\n2\n34\n43\n23"|awk '{print "Number is: " $1}'
  2. Number is:1
  3. Number is:2
  4. Number is:34
  5. Number is:43
  6. Number is:23
  7. [root@web1 function]# echo -e "1\n2\n34\n43\n23"|awk '{printf "Number is: " $1;} END{printf "\n"}'
  8. Number is:1Number is:2Number is:34Number is:43Number is:23
  9. [root@web1 function]# echo -e "1\n2\n34\n43\n23"|awk '{printf "Number is: " $1 "\n"}'
  10. Number is:1
  11. Number is:2
  12. Number is:34
  13. Number is:43
  14. 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

Copyright © Linux教程網 All Rights Reserved