首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解释awk命令‘awk '{ if (NF > max) max = NF } END { print max }’

解释awk命令‘awk '{ if (NF > max) max = NF } END { print max }’
EN

Stack Overflow用户
提问于 2013-10-24 19:33:53
回答 2查看 4.3K关注 0票数 3

在一个在线的awk手册中,我找到了示例awk '{ if (NF > max) max = NF } END { print max }',这个程序在任何输入行上都会打印出最大数量的字段。但是我不明白,如果(NF > max)只是一个未定义的字符串,那么"max"是如何比较"max"的呢??它可以是0,100或100,000?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-24 19:37:53

考虑到在第一次运行时,max没有任何价值。因此,字段的数量大于不存在的字段数,并且更新max以反映第一行中的字段数。每个循环都会进行相同的检查:“这一行的字段是否比我们任意命名的变量更多?”因此,当您结束时,您知道max反映了字段的最大数量。

Update:@s.bandara的评论是对的,并建议我应该更清楚地指出max的价值。@Josh Caswell的回答给出了一些很好的技术细节,所以我将添加一个简单的例子来说明他的观点:

代码语言:javascript
复制
echo '' | awk 'END {print (monkey=="")}' // true, an undefined variable is equal to the empty string
echo '' | awk 'END {print (monkey==0)}' // true, the numerical value of an undefined variable is 0
echo '' | awk 'END {print (monkey==biscuits)}' // true, one undefined variable is equal to another
echo '' | awk 'END {print (monkey=="test")}' // false
echo '' | awk 'END {print (monkey==4)}' // false
票数 3
EN

Stack Overflow用户

发布于 2013-10-24 19:44:09

awk 在使用之前不需要声明或初始化。中的一个变量。它将在需要时被创建。如果没有给出特定的值,则将使用默认的空字符串。在比较上下文中,空字符串被强制为数字零。

因此,在代码中,max是在第一次引用if (NF > max)时创建的,这是第一次对if (NF > max)进行评估。在此之后,如果if测试成功,它将存在并被分配给它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19574967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档