- AWK 教程
- AWK - 首页
- AWK - 概述
- AWK - 环境
- AWK - 工作流程
- AWK - 基本语法
- AWK - 基本示例
- AWK - 内置变量
- AWK - 运算符
- AWK - 正则表达式
- AWK - 数组
- AWK - 控制流
- AWK - 循环
- AWK - 内置函数
- AWK - 用户自定义函数
- AWK - 输出重定向
- AWK - 美化输出
- AWK 有用资源
- AWK - 快速指南
- AWK - 有用资源
- AWK - 讨论
AWK - 输出重定向
到目前为止,我们已将数据显示在标准输出流上。我们还可以将数据重定向到文件。重定向出现在print或printf语句之后。AWK中的重定向与shell命令中的重定向写法相同,只是它们写在AWK程序内部。本章将通过合适的示例解释重定向。
重定向运算符
重定向运算符的语法如下:
语法
print DATA > output-file
它将数据写入output-file。如果output-file不存在,则创建一个。当使用这种类型的重定向时,output-file会在写入第一个输出之前被擦除。随后对同一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
执行此代码后,您将获得以下结果:
输出
Hello, World !!!
追加运算符
追加运算符的语法如下:
语法
print DATA >> output-file
它将数据追加到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 !!!
管道
可以通过管道将输出发送到另一个程序,而不是使用文件。此重定向打开到command的管道,并通过此管道将项目的value写入另一个进程以执行command。重定向参数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函数将output存储到out变量中。
下一个print语句打印输出,最后close函数关闭命令。