Bash 什么';这是';cat&x27;和';回声&x27;awk命令

Bash 什么';这是';cat&x27;和';回声&x27;awk命令,bash,shell,awk,Bash,Shell,Awk,这是test.file: 2017 2018 这是我在终端中尝试的: $ echo 2 | awk '{ print 6 }' 6 $ cat test.file | awk '{ print 6 }' 6 6 我的问题是: 为什么echo不像cat那样显示数字“6”两次?您正在输入的cat文件包含两行输入,而您使用echo流式处理的文件只有一行 如果将echos更改为等效,如中所示: { echo 2017; echo 2018; } | awk '{ print 6 }' …您将

这是test.file:

2017
2018
这是我在终端中尝试的:

$ echo 2 | awk '{ print 6 }'   
6
$ cat test.file | awk '{ print 6 }'
6
6
我的问题是:


为什么
echo
不像
cat
那样显示数字“6”两次?

您正在输入的
cat
文件包含两行输入,而您使用
echo
流式处理的文件只有一行

如果将
echo
s更改为等效,如中所示:

{ echo 2017; echo 2018; } | awk '{ print 6 }'
…您将获得相同的两行输出


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


当您只有
{print 6}
时,您将保留默认模式(即为每行输入运行该块)。因此,当您输入两行输入时,
{print 6}
将运行两次。

您输入的
cat
文件包含两行输入,而您使用
echo
流式处理的文件只有一行

如果将
echo
s更改为等效,如中所示:

{ echo 2017; echo 2018; } | awk '{ print 6 }'
…您将获得相同的两行输出


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


当您只有
{print 6}
时,您将保留默认模式(即为每行输入运行该块)。因此,当您输入两行输入时,
{print 6}
将运行两次。

BTW,
awk'{print 6}'(例如,
wc-c
可以直接询问操作系统附加的文件有多大,或者
sort
可以让另一个线程在另一个线程处理文件的前半部分时,提前跳过另一个线程开始对文件的后半部分进行排序——但只能使用真实文件,而不能使用管道)。@CharlesDuffy-will
awk'{print 6}“
比普通的旧
awk'{print 6}”文件更有效
?@Mr.Llama,这些文件实际上是等效的;我展示了
BTW,
awk'{print 6}”(例如,
wc-c
可以直接询问操作系统附加的文件有多大,或者
sort
可以让另一个线程在另一个线程处理文件的前半部分时,提前跳过另一个线程开始对文件的后半部分进行排序——但只能使用真实文件,而不能使用管道)。@CharlesDuffy-will
awk'{print 6}“
比普通的老式
awk'{print 6}更有效“文件< /代码>?@ L.LAMLA,这些是等效的;我展示了<代码>再次感谢您的详细解答。@ XYOABC,很高兴有帮助。如果您认为问题关闭,请考虑点击答案旁边的复选框来标记回答的问题。谢谢您的详细回答。@ XYOABC,很高兴有帮助。如果您考虑的阙SUTY关闭,请考虑点击复选框旁边的答案来标记所回答的问题。