AWK 輸出重定向

2020-10-20 15:30 更新

輸出重定向

到目前為止我們輸出的數(shù)據(jù)都是輸出到標準輸出流中。不過我們也可以將數(shù)據(jù)輸出重定向到文件中。重定向操作往往出現(xiàn)在 print 或者 printf 語句中。 AWK 中的重定向方法與 shell 重定向十分相似,除了 AWK 重定向只用于 AWK 程序中外。本章節(jié)將講述重定向的使用方法:

重定向操作符

重定向操作符的使用方法如下:

print DATA > output-file

上面重定向操作將輸出數(shù)據(jù)重定向到 output-file 中。如果 output-file 文件不存在,則先創(chuàng)建該文件。使用這種重定向方式時,數(shù)據(jù)輸出前會將 output-file 文件中原有的數(shù)據(jù)刪除。下面的示例將 Hello,World!!! 消息重定向輸出到文件中。

先創(chuàng)建文件并在文件中輸入一些數(shù)據(jù)。

[jerry]$ echo "Old data" > /tmp/message.txt 
[jerry]$ cat /tmp/message.txt

執(zhí)行上面的命令可以得到如下的結(jié)果:

Old data

再用 AWK 重定向操作符重定向數(shù)據(jù)到文件 message.txt 中。

[jerry]$ awk 'BEGIN { print "Hello, World !!!" > "/tmp/message.txt" }'
[jerry]$ cat /tmp/message.txt

執(zhí)行上面的命令可以得到如下的結(jié)果:

Hello, World !!!

追加重定向

追加重定向操作符的語法如下:

print DATA >> output-file

用這種重定向方式將數(shù)據(jù)追加到 output-file 文件的末尾。如果文件不存在則先創(chuàng)建該文件。示例如下:

創(chuàng)建文件并輸入一些數(shù)據(jù):

[jerry]$ echo "Old data" >> /tmp/message.txt 
[jerry]$ cat /tmp/message.txt

執(zhí)行上面的命令可以得到如下的結(jié)果:

Old data

再使用 AWK 追加操作符追加內(nèi)容到文件中:

[jerry]$ awk 'BEGIN { print "Hello, World !!!" >> "/tmp/message.txt" }'
[jerry]$ cat /tmp/message.txt

執(zhí)行上面的命令可以得到如下的結(jié)果:

Old data
Hello, World !!!

管道

除了使用文件在程序之間傳遞數(shù)據(jù)之外,AWK 還提供使用管道將一個程序的輸出傳遞給另一個程序。這種重定向方式會打開一個管道,將對象的值通過管道傳遞給管道另一端的進程,然后管道另一端的進程執(zhí)行命令。下面是管道的使用方法:

print items | command

下面的例子中我們使用 tr 命令將小寫字母轉(zhuǎn)換成大寫。

[jerry]$ awk 'BEGIN { print "hello, world !!!" | "tr [a-z] [A-Z]" }'

執(zhí)行上面的命令可以得到如下的結(jié)果:

HELLO, WORLD !!!

雙向通信通道

AWK 允許使用 |& 與一個外部進程通信,并且可以雙向通信。下面的例子中,我們?nèi)匀皇褂?tr 命令將字母轉(zhuǎn)換為大寫字母。 command.awk 文件內(nèi)容如下:

BEGIN {
    cmd = "tr [a-z] [A-Z]"
    print "hello, world !!!" |& cmd
    close(cmd, "to")
    cmd |& getline out
    print out;
    close(cmd);
}

執(zhí)行上面的命令可以得到如下的結(jié)果:

HELLO, WORLD !!!

腳本的內(nèi)容看上去很神秘嗎?讓我們一步一步揭開它神秘的面紗。

  • 第一條語句 cmd = "tr [a-z] [A-Z]" 在AWK 中建立了一個雙向的通信通道。
  • 第二條語句 print 為 tr 命令提供輸入。&| 表示雙向通信。
  • 第三條語句 close(cmd, "to") 執(zhí)行后關(guān)閉 to 進程。
  • 第四條語句 cmd |& getline out 使用 getline 函數(shù)將輸出存儲到 out 變量中。
  • 接下來的輸出語句打印輸出的內(nèi)容,最后 close 函數(shù)關(guān)閉 cmd。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號