- AWK 教程
- AWK - 首頁
- AWK - 概述
- AWK - 環境
- AWK - 工作流程
- AWK - 基本語法
- AWK - 基本示例
- AWK - 內建變數
- AWK - 運算子
- AWK - 正則表示式
- AWK - 陣列
- AWK - 控制流
- AWK - 迴圈
- AWK - 內建函式
- AWK - 使用者自定義函式
- AWK - 輸出重定向
- AWK - 美化輸出
- AWK 有用資源
- AWK - 快速指南
- AWK - 有用資源
- AWK - 討論
AWK - 輸出重定向
到目前為止,我們已將資料顯示在標準輸出流上。我們還可以將資料重定向到檔案。重定向出現在print或printf語句之後。AWK中的重定向與shell命令中的重定向寫法相同,只是它們寫在AWK程式內部。本章將透過合適的示例解釋重定向。
重定向運算子
重定向運算子的語法如下:
語法
print DATA > output-file
它將資料寫入output-file。如果output-file不存在,則建立一個。當使用這種型別的重定向時,output-file會在寫入第一個輸出之前被擦除。隨後對同一output-file的寫入操作不會擦除output-file,而是追加到其末尾。例如,以下示例將Hello, World !!!寫入檔案。
讓我們建立一個包含一些文字資料的檔案。
示例
[jerry]$ echo "Old data" > /tmp/message.txt [jerry]$ cat /tmp/message.txt
執行此程式碼後,您將獲得以下結果:
輸出
Old data
現在讓我們使用AWK的重定向運算子將一些內容重定向到其中。
示例
[jerry]$ awk 'BEGIN { print "Hello, World !!!" > "/tmp/message.txt" }'
[jerry]$ cat /tmp/message.txt
執行此程式碼後,您將獲得以下結果:
輸出
Hello, World !!!
追加運算子
追加運算子的語法如下:
語法
print DATA >> output-file
它將資料追加到output-file。如果output-file不存在,則建立一個。當使用這種型別的重定向時,新內容將追加到檔案末尾。例如,以下示例將Hello, World !!!追加到檔案。
讓我們建立一個包含一些文字資料的檔案。
示例
[jerry]$ echo "Old data" > /tmp/message.txt [jerry]$ cat /tmp/message.txt
執行此程式碼後,您將獲得以下結果:
輸出
Old data
現在讓我們使用AWK的追加運算子將一些內容追加到其中。
示例
[jerry]$ awk 'BEGIN { print "Hello, World !!!" >> "/tmp/message.txt" }'
[jerry]$ cat /tmp/message.txt
執行此程式碼後,您將獲得以下結果:
輸出
Old data Hello, World !!!
管道
可以透過管道將輸出傳送到另一個程式,而不是使用檔案。此重定向開啟到command的管道,並透過此管道將專案的value寫入另一個程序以執行command。重定向引數command實際上是一個AWK表示式。以下是管道的語法:
語法
print items | command
讓我們使用tr命令將小寫字母轉換為大寫字母。
示例
[jerry]$ awk 'BEGIN { print "hello, world !!!" | "tr [a-z] [A-Z]" }'
執行此程式碼後,您將獲得以下結果:
輸出
HELLO, WORLD !!!
雙向通訊
AWK可以使用|&與外部程序通訊,這是雙向通訊。例如,以下示例使用tr命令將小寫字母轉換為大寫字母。我們的command.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函式將output儲存到out變數中。
下一個print語句列印輸出,最後close函式關閉命令。