在一个在线的awk手册中,我找到了示例awk '{ if (NF > max) max = NF } END { print max }',这个程序在任何输入行上都会打印出最大数量的字段。但是我不明白,如果(NF > max)只是一个未定义的字符串,那么"max"是如何比较"max"的呢??它可以是0,100或100,000?
发布于 2013-10-24 19:37:53
考虑到在第一次运行时,max没有任何价值。因此,字段的数量大于不存在的字段数,并且更新max以反映第一行中的字段数。每个循环都会进行相同的检查:“这一行的字段是否比我们任意命名的变量更多?”因此,当您结束时,您知道max反映了字段的最大数量。
Update:@s.bandara的评论是对的,并建议我应该更清楚地指出max的价值。@Josh Caswell的回答给出了一些很好的技术细节,所以我将添加一个简单的例子来说明他的观点:
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发布于 2013-10-24 19:44:09
awk 在使用之前不需要声明或初始化。中的一个变量。它将在需要时被创建。如果没有给出特定的值,则将使用默认的空字符串。在比较上下文中,空字符串被强制为数字零。
因此,在代码中,max是在第一次引用if (NF > max)时创建的,这是第一次对if (NF > max)进行评估。在此之后,如果if测试成功,它将存在并被分配给它。
https://stackoverflow.com/questions/19574967
复制相似问题