AWK - 輸出重定向



到目前為止,我們已將資料顯示在標準輸出流上。我們還可以將資料重定向到檔案。重定向出現在printprintf語句之後。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函式關閉命令。

廣告

© . All rights reserved.