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
它将数据附加到输出文件中。如果输出文件不存在,则会创建一个。使用这种类型的重定向时,新内容将附加在文件末尾。例如,以下示例附加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 [az] [AZ]"是我们与 AWK 建立双向通信的命令。
下一条语句,即 print 命令,为tr命令提供输入。这里&| 表示双向通信。
第三条语句,即close(cmd, "to") ,在竞争执行后关闭to进程。
下一条语句cmd |& getline out借助 getline 函数将输出存储到 out 变量中。
下一个 print 语句打印输出,最后close函数关闭命令。