为何我的awk脚本无法将0作为一行读取?
问题分析与解决
原脚本的问题出在模式匹配$0:在awk中,当$0的值为0时,会被当作布尔假值,导致该行的代码块完全不执行,所以包含0的行被跳过,无法参与计数和求和。
修改后的脚本
BEGIN { x = 0; sum = 0 } { x += 1 sum += $0 if (x == 2) { print sum / x x = 0 sum = 0 } }
修改说明
- 移除了原脚本中的
$0模式,改为无模式的代码块,这样每一行输入都会被处理,包括值为0的行。 - 显式在
BEGIN块中初始化sum,让代码逻辑更清晰(原脚本中sum首次使用会自动初始化为0,但显式初始化更严谨)。
测试验证
输入:
2 3 4 0
输出:
2.5 2.0
输入:
2 3 6 7
输出:
2.5 6.5
内容的提问来源于stack exchange,提问作者Dawid Kozłowski
相关产品推荐
相关产品推荐

