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 !!!
管道
可以通过管道而不是使用文件将输出发送到另一个程序。此重定向打开到命令的管道,并通过此管道将项目的值写入另一个进程以执行该命令。重定向参数command实际上是一个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 变量中。 -
下一个 print 语句打印输出,最后使用 close 函数关闭命令。