- AWK 教程
- AWK - 首頁
- AWK - 概述
- AWK - 環境
- AWK - 工作流程
- AWK - 基本語法
- AWK - 基本示例
- AWK - 內建變數
- AWK - 運算子
- AWK - 正則表示式
- AWK - 陣列
- AWK - 控制流
- AWK - 迴圈
- AWK - 內建函式
- AWK - 使用者自定義函式
- AWK - 輸出重定向
- AWK - 美化列印
- AWK 有用資源
- AWK - 快速指南
- AWK - 有用資源
- AWK - 討論
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