不使用循环构造进行Awk迭代

不使用循环构造进行Awk迭代,awk,Awk,我正在阅读一篇关于awk脚本的教程,并观察到这种奇怪的行为,为什么这个awk脚本在执行时会重复地询问一个数字,即使没有像while或for这样的循环构造。如果我们输入CTRL+D(EOF),它将停止提示输入另一个数字 #!/bin/awk -f BEGIN { print "type a number"; } { print "The square of ", $1, " is ", $1*$1; print "type another number"; } END {

我正在阅读一篇关于
awk
脚本的教程,并观察到这种奇怪的行为,为什么这个awk脚本在执行时会重复地询问一个数字,即使没有像
while
for
这样的循环构造。如果我们输入
CTRL+D
(EOF),它将停止提示输入另一个数字

#!/bin/awk -f
BEGIN {
    print "type a number";
}
{
    print "The square of ", $1, " is ", $1*$1;
    print "type another number";
}
END {
    print "Done"
}

请解释上述awk脚本的这种行为

尝试此操作,然后输入0退出

BEGIN {
    print "type a number";
}
{
    if($1==0)
       exit;
    print "The square of ", $1, " is ", $1*$1;
    print "type another number";
}
END {
    print "Done"
}
来自著名的:


如果您没有在命令行上为awk脚本提供输入文件,awk会将程序应用于您接下来在终端上键入的任何内容,直到您键入文件结束信号(Unix系统上的control-d)。

awk
继续在行上工作,直到到达文件结束。由于在这种情况下,输入(STDIN)永远不会随着您不断输入数字或按enter键而结束,因此会导致无休止的循环

当您点击CTRL+D时,您指示
awk
脚本,该脚本通过退出循环到达EOF