AWK輸出重定向


到目前為止,我們已經顯示資料在標準輸出流。但是,也可以重定向資料到檔案。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函式關閉命令。