到目前为止,我们已经显示数据在标准输出流。但是,也可以重定向数据到文件。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函数关闭命令。