使用awk在'cat'和'echo'命令之间有什么区别

xoy*_*abc 1 bash shell awk

这是test.file:

2017
2018
Run Code Online (Sandbox Code Playgroud)

这是我在终端尝试的:

$ echo 2 | awk '{ print 6 }'   
6
$ cat test.file | awk '{ print 6 }'
6
6
Run Code Online (Sandbox Code Playgroud)

我的问题是:

为什么echo两次不显示数字'6' cat

Cha*_*ffy 5

您正在提供的文件cat包含两行输入,而您流式传输echo的文件只包含一行.

如果将echos 更改为等效,如:

{ echo 2017; echo 2018; } | awk '{ print 6 }'
Run Code Online (Sandbox Code Playgroud)

...你得到相同的两行输出.


这里要记住的是awk脚本由一般形式的块组成PATTERN { BLOCK },其中PATTERN确定是否以及何时执行BLOCK.(这两个都是可选的:默认模式是为每一行运行;默认模块是{ print $0 },以完整打印当前行).

当你刚刚拥有时{ print 6 },你将保持默认模式(即为每一行输入运行该块).因此,当您输入两行输入时,{ print 6 }会运行两次.