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 的 append 运算符将一些内容附加到它。
示例
[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 建立双向通信的命令。
下一条语句,即 print 命令为 tr 命令提供输入。 这里&|表示双向通信。
第三条语句,即 close(cmd, "to"),在竞争执行后关闭 to 进程。
下一条语句 cmd |& getline out 借助 getline 函数将 输出 存储到 out 变量中。
下一个打印语句打印输出,最后 close 函数关闭命令。