AWK - 输出重定向

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

管道

可以通过管道而不是使用文件将输出发送到另一个程序.此重定向打开管道命令,并通过此管道将项目的值写入另一个进程以执行该命令.重定向参数命令实际上是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 命令.这里& | 表示双向沟通.

  • 第三个声明,即关闭(cmd,"到"),在竞争执行后关闭进程.

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

  • 下一个print语句打印出来输出,最后关闭函数关闭命令.