📜  AWK-输出重定向

📅  最后修改于: 2020-11-05 03:53:35             🧑  作者: Mango


到目前为止,我们在标准输出流上显示了数据。我们还可以将数据重定向到文件。重定向出现在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 !!!

追加运算符

append运算符的语法如下-

句法

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 [az] [AZ]”是我们从AWK建立双向通讯的命令。

  • 下一条语句,即print命令,为tr命令提供输入。这里&|表示双向通讯。

  • 第三条语句close(cmd,“ to”)在竞争执行后关闭to进程。

  • 一条语句cmd |&getline out借助getline函数将输出存储到out变量中。

  • 下一条print语句打印输出,最后close函数关闭命令。