Linux基础知识 ·

Linux文本三剑客之awk输出重定向

[隐藏]

输出重定向

到目前为止我们输出的数据都是输出到标准输出流中。不过我们也可以将数据输出重定向到文件中。重定向操作往往出现在 print 或者 printf 语句中。 AWK 中的重定向方法与 shell 重定向十分相似,除了 AWK 重定向只用于 AWK 程序中外。本章节将讲述重定向的使用方法:

重定向操作符

重定向操作符的使用方法如下:

上面重定向操作将输出数据重定向到 output-file 中。如果 output-file 文件不存在,则先创建该文件。使用这种重定向方式时,数据输出前会将 output-file 文件中原有的数据删除。下面的示例将 Hello,World!!! 消息重定向输出到文件中。

先创建文件并在文件中输入一些数据。

执行上面的命令可以得到如下的结果:

再用 AWK 重定向操作符重定向数据到文件 message.txt 中。

执行上面的命令可以得到如下的结果:

追加重定向

追加重定向操作符的语法如下:

用这种重定向方式将数据追加到 output-file 文件的末尾。如果文件不存在则先创建该文件。示例如下:

创建文件并输入一些数据:

执行上面的命令可以得到如下的结果:

再使用 AWK 追加操作符追加内容到文件中:

执行上面的命令可以得到如下的结果:

管道

除了使用文件在程序之间传递数据之外,AWK 还提供使用管道将一个程序的输出传递给另一个程序。这种重定向方式会打开一个管道,将对象的值通过管道传递给管道另一端的进程,然后管道另一端的进程执行命令。下面是管道的使用方法:

下面的例子中我们使用 tr 命令将小写字母转换成大写。

执行上面的命令可以得到如下的结果:

双向通信管道

AWK 允许使用 |& 与一个外部进程通信,并且可以双向通信。下面的例子中,我们仍然使用 tr 命令将字母转换为大写字母。 command.awk 文件内容如下:

执行上面的命令可以得到如下的结果:

脚本的内容看上去很神秘吗?让我们一步一步揭开它神秘的面纱。

  • 第一条语句 cmd = "tr [a-z] [A-Z]" 在AWK 中建立了一个双向的通信通道。
  • 第二条语句 print 为 tr 命令提供输入。&| 表示双向通信。
  • 第三条语句 close(cmd, "to") 执行后关闭 to 进程。
  • 第四条语句 cmd |& getline out 使用 getline 函数将输出存储到 out 变量中。
  • 接下来的输出语句打印输出的内容,最后 close 函数关闭 cmd。

参与评论