AWK 输出重定向

AWK 输出重定向

到目前为止,我们在标准输出流中显示数据。我们也可以将数据重定向到一个文件中。重定向出现在 printprintf 语句之后。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 函数关闭命令。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程