为什么awk for loop在打印之前需要使用ENTER键?

时间:2015-02-27 08:41:33

标签: for-loop awk

计划:for_loop.awk

{
sum = 0
i = 1
for (i=1; i<=10; i++)
{
  sum += i;
}
printf "Sum for 1 to 10 numbers = %d \nGoodbuy!\n\n", sum
exit 1
}

如果我使用 awk -f for_loop.awk 执行上面的代码,它正在等待输入然后如果我按ENTER键然后它只显示printf语句,否则它正在等待我的响应。

while / do while循环中不会发生这种情况。仅在for循环中,它需要键盘输入(ENTER),然后才显示输出。

任何人都可以解释为什么会这样吗? (原谅我任何拼写或语法错误)


编辑:

还有一个与上述问题有关的问题,即

如果我删除该程序中的exit 1,它仍然在等待我的输入(Enter键),如果我这样做,它会按下(输入键)或直到Ctrl +打印相同的输出多次D(退出)。

没有循环如何运行无限次?意味着它是否正在执行exit 1意味着它已经不在循环中但它又如何返回并执行相同的语句。

由于

3 个答案:

答案 0 :(得分:2)

你的awk程序包含一个由每行输入触发的动作。当您按ENTER键时,您将使用第一个(尽管是空的)输入行触发该操作。您按预期打印1到10之和,然后exit语句退出程序而不尝试再读取任何输入。

这回答了你的问题,但我怀疑你有更多想要解决的问题。如果您愿意,请更新您的问题(或开始新的问题),我们会尝试提供更多帮助!

修改 正如评论中所提到的,awk的基本方面是为每一行输入运行正常的操作,而不必自己明确地进行循环。玩这个例子和/或用在线教程花几分钟来得到这个想法:

BEGIN { print "do this once before reading input" }

{ print "do this for each line of input (now processing '" $0 "')" }

END { print "do this once after reading all input" }

答案 1 :(得分:1)

除非您在BEGIN块中运行代码,否则awk将等待输入:

示例:

等待输入:

awk '{print "hello world!"}'

这不是:

awk 'BEGIN{print "hello world!"}'

所以要修复你的代码:

BEGIN{
    for (i=1; i<=10; i++)
    {
       sum += i;
    }
    printf "Sum for 1 to 10 numbers = %d \nGoodbye!\n\n", sum
    exit 0
}

答案 2 :(得分:0)

您也可以在没有任何输入文件的情况下运行awk。

如果您输入以下命令行: awk'program'

awk将程序应用于标准输入,这通常意味着您在终端上输入的内容。这将继续,直到您通过键入Ctrl-d指示文件结束。 (在其他操作系统上,文件结束字符可能不同。例如,在OS / 2上,它是Ctrl-z)


(资料来源:GAWK:Arnold D. Robbins的有效AWK编程)