在一个在线 awk 手册中,我找到了示例
awk '{ if (NF > max) max = NF } END { print max }'
该程序在任何输入行上打印最大字段数。(NF > max)
但我不明白如果"max"
只是未定义的字符串, awk 如何进行比较?它可以是 0 或 100 或 100,000?:-)
问问题
4187 次
2 回答
3
考虑到第一次运行时,max
没有任何价值。因此字段数大于不存在的,并max
更新以反映第一行中的字段数。每个循环都执行相同的检查:“这一行的字段是否比我们任意命名的变量多?” 因此,当您走到最后时,您就知道max
反映了最大字段数。
更新:@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-24T19:37:53.450 回答
2
变量 inawk
不需要在使用前声明或初始化。它将在需要时创建。如果没有给定特定值,将使用默认的空字符串。在比较的上下文中,空字符串被强制为零。
因此,在您的代码中,max
第一次被引用时创建,第一次if (NF > max)
被评估。之后,它存在并且如果 if 测试成功将被分配给它。
于 2013-10-24T19:44:09.630 回答