到目前為止,我們已經顯示數據在標準輸出流。但是,也可以重定向數據到檔。print 或 printf 語句重定向顯示。重定向在AWK寫就像在重定向shell命令,但它們是寫在AWK程式中。下麵的這個教程是解釋重定向例子。
重定向操作
下麵給出的是重定向操作的語法。
print DATA > 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。如果輸出檔不存在,那麼它被創建。當使用這種類型的重定向時,新的內容被附加在檔的結尾。比如下麵追加的例子 >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 !!!
管道
通過管道來發送代替使用檔輸出到另一個程式。這種重定向打開一個管道命令,並通過這個管道寫入項的值,以另一種方法來執行命令。重定向參數命令實際上是一個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建立雙向通信的命令。
下麵的語句即列印命令,提供輸入到tr命令。此處&| 指示雙向通信。
第三條語句即 close(cmd, "to") - 關閉完成其執行後處理。
下一條語句 cmd |& getline out 存儲在輸出入出變數具有getline函數功能。
接下來print語句列印輸出,並最終執行close函數關閉命令。