AWK - 其他函式



AWK 具有以下其他函式:

close(expr)

此函式關閉檔案或管道。

示例

[jerry]$ awk 'BEGIN {
   cmd = "tr [a-z] [A-Z]"
   print "hello, world !!!" |& cmd
   
   close(cmd, "to")
   cmd |& getline out
   print out;
   
   close(cmd);
}'

執行此程式碼後,您將獲得以下結果:

輸出

HELLO, WORLD !!!

指令碼看起來很神秘嗎?讓我們來解釋一下。

  • 第一條語句,cmd = "tr [a-z] [A-Z]" - 是我們與 AWK 建立雙向通訊的命令。

  • 下一條語句,即print命令,為tr命令提供輸入。這裡&|表示雙向通訊。

  • 第三條語句,即close(cmd, "to"),在完成執行後關閉to程序。

  • 下一條語句cmd |& getline out藉助getline函式將輸出儲存到out變數中。

  • 接下來的print語句列印輸出,最後close函式關閉命令。

delete

此函式從陣列中刪除元素。以下示例顯示了delete函式的用法:

示例

[jerry]$ awk 'BEGIN {
   arr[0] = "One"
   arr[1] = "Two"
   arr[2] = "Three"
   arr[3] = "Four"
   print "Array elements before delete operation:"
   
   for (i in arr) {
      print arr[i]
   }
   delete arr[0]
   delete arr[1]
   print "Array elements after delete operation:"
   
   for (i in arr) {
      print arr[i]
   }
}'

執行此程式碼後,您將獲得以下結果:

輸出

Array elements before delete operation:
One
Two
Three
Four

Array elements after delete operation:
Three
Four

exit

此函式停止指令碼的執行。它還接受一個可選的expr,它將成為 AWK 的返回值。以下示例描述了 exit 函式的用法。

示例

[jerry]$ awk 'BEGIN {
   print "Hello, World !!!"
   exit 10
   print "AWK never executes this statement."
}'

執行此程式碼後,您將獲得以下結果:

輸出

Hello, World !!!

fflush

此函式重新整理與開啟的輸出檔案或管道關聯的任何緩衝區。以下語法演示了該函式。

語法

fflush([output-expr])

如果沒有提供 output-expr,它將重新整理標準輸出。如果 output-expr 為空字串 (""),則它將重新整理所有開啟的檔案和管道。

getline

此函式指示 AWK 讀取下一行。以下示例使用 getline 函式讀取並顯示marks.txt檔案。

示例

[jerry]$ awk '{getline; print $0}' marks.txt

執行此程式碼後,您將獲得以下結果:

輸出

2) Rahul   Maths     90
4) Kedar   English   85
5) Hari    History   89

指令碼執行良好。但是第一行在哪裡呢?讓我們找出答案。

一開始,AWK 從marks.txt檔案讀取第一行並將其儲存到$0變數中。

最後,AWK 的print語句列印第二行。此過程持續到檔案結尾。

next

next函式改變程式的流程。它導致當前模式空間的處理停止。程式讀取下一行,並使用新行再次開始執行命令。例如,以下程式在模式匹配成功時不執行任何處理。

示例

[jerry]$ awk '{if ($0 ~/Shyam/) next; print $0}' marks.txt

執行此程式碼後,您將獲得以下結果:

輸出

1) Amit    Physics   80
2) Rahul   Maths     90
4) Kedar   English   85
5) Hari    History   89

nextfile

nextfile函式改變程式的流程。它停止處理當前輸入檔案,並開始一個新的模式/過程語句迴圈,從下一個檔案的第一個記錄開始。例如,以下示例在模式匹配成功時停止處理第一個檔案。

首先建立兩個檔案。假設file1.txt包含:

file1:str1
file1:str2
file1:str3
file1:str4

file2.txt包含:

file2:str1
file2:str2
file2:str3
file2:str4

現在讓我們使用 nextfile 函式。

示例

[jerry]$ awk '{ if ($0 ~ /file1:str2/) nextfile; print $0 }' file1.txt file2.txt

輸出

執行此程式碼後,您將獲得以下結果:

file1:str1
file2:str1
file2:str2
file2:str3
file2:str4

return

此函式可用於使用者定義的函式中以返回值。請注意,如果沒有提供 expr,則函式的返回值未定義。以下示例描述了 return 函式的用法。

首先,建立一個包含如下所示 AWK 命令的functions.awk檔案:

示例

function addition(num1, num2) {
   result = num1 + num2
   return result
}
BEGIN {
   res = addition(10, 20)
   print "10 + 20 = " res
}

執行此程式碼後,您將獲得以下結果:

輸出

10 + 20 = 30

system

此函式執行指定的命令並返回其退出狀態。返回值 0 表示命令執行成功。非零值表示命令執行失敗。例如,以下示例顯示當前日期並顯示命令的返回狀態。

示例

[jerry]$ awk 'BEGIN { ret = system("date"); print "Return value = " ret }'

執行此程式碼後,您將獲得以下結果:

輸出

Sun Dec 21 23:16:07 IST 2014
Return value = 0
awk_built_in_functions.htm
廣告
© . All rights reserved.