在awk中求1到1000之间3和5的倍数之和
我正在尝试通过做一些欧拉项目问题来学习 awk。
这是我的代码。我不知道为什么它挂起。请指教
$ awk '{ sum=0
> for (i=3; i<=1000; i++){
> if ((i % 3 == 0) || (i % 5 == 0))
> sum+=i
> }
> print sum }'
I am trying to learn awk by doing some Project Euler questions.
Here is my code. I am not sure why it hangs. please advise
$ awk '{ sum=0
> for (i=3; i<=1000; i++){
> if ((i % 3 == 0) || (i % 5 == 0))
> sum+=i
> }
> print sum }'
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
将整个内容放在
BEGIN
块中:Put the whole thing in a
BEGIN
block:awk
与sed
非常相似,适用于通过STDIN
或文件名提供的输入。您没有提供此类输入。您想要的是这样的:
请注意,我将
echo
的输出(本质上只是一个换行符)通过管道传输到 awk,以便它可以至少执行一次循环awk
, much likesed
, works on input either provided throughSTDIN
or a filename. You have provided no such input.What you want is something like this:
Notice that I piped the output of
echo
(essentially just a newline) to awk so it can perform your loop at least once这里有 2 个问题
Awk 通常一次处理一行,除了 BEGIN 或 END 块中的代码
当附加到管道时,Awk 可以从 STDIN 读取,或者如 SiegeX 所解释,当您给出文件名作为输入时。
这应该可以帮你解决。
/dev/null 是有效的文件名,不包含任何数据。所以 awk 中的“主”循环运行了。
然后程序感知到“没有更多数据,是时候运行 END 块了”
我希望这会有所帮助。
You have 2 issues here
Awk normally processes a line at a time Except for the code in a BEGIN or END block
Awk can read from STDIN when attached to a pipe OR as SiegeX explains, when you give a fileName as input.
This should fix it for you.
/dev/null is a valid fileName, that contains no data. So the 'main' loop in awk is run.
Then program senses 'no more data, time to run the END block'
I hope this helps.