计划: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
意味着它已经不在循环中但它又如何返回并执行相同的语句。
由于
答案 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编程)