You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWK程序执行逻辑问询:输入、代码与结果的原理解析

AWK脚本执行逻辑疑问解答

输入数据

2018 Fiat 125
2018-01-17: Opel 2 Volvo 3
2017-01-21: Fiat 5 Fiat 6
2017-02-22: Opel 7 Fiat 8
2018-01-31: Fiat 9 Opel 17

AWK脚本代码

$1 !~ /17/ {t[$2]+= $3;}
END {for (i in t)
print i": "t[i];}

运行结果

Fiat: 134

疑问解答

  • 条件$1 !~ /17/的匹配范围
    你的判断是对的,这个条件只匹配第一行和最后一行:

    • 第一行的第一个字段$1是2018,不含17,符合条件;
    • 最后一行的$1是2018-01-31,也不含17,符合条件;
    • 其余行的$1都包含17(比如第二行的2018-01-17:、第三行的2017-01-21:),所以不会执行后续的累加操作。
  • 语句t[$2]+= $3的执行逻辑
    这是AWK关联数组的累加操作:

    • 第一行执行时,$2是Fiat,$3是125。AWK中未初始化的数组元素默认值为0,所以t["Fiat"] = 0 + 125 = 125;
    • 最后一行执行时,$2还是Fiat,$3是9,此时t["Fiat"]已有值125,所以累加后变成125 + 9 = 134,这就是最终结果的由来。
  • 变量i的含义
    在END块的for (i in t)循环里,i是关联数组t的键名。这里t数组只有一个键Fiat,所以循环会遍历这个键,然后输出键名i和对应的数组值t[i]。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 04:50:34