我有一个 awk 命令:
awk '/a|b|c/{sum+=1} {if($NF=="e" && sum) count++} END {print sum, count}' file
所以假设我们将其应用到一个文件letter
:
a e
b d
c e
c f
d e
这意味着sum
应该是 4,并且count
应该是 2,因为最后一列是e
与模式匹配的 2 行。
但我发现4 3
,我认为它可能只读取 $NF=e,但不确定如何修复它。
答案1
count
只要最后一列是字母e
并且sum
变量非零,您的变量就会递增。一旦执行,您的sum
变量将不为零sum+=1
,这是当您的代码看到第一行输入(给定示例文本)时发生的第一件事。然后你e
在第二列中出现三次。
如果您想sum
在该行匹配a|b|c
且count
该行的最后一列另外为 时递增e
:
awk '/a|b|c/ { ++sum; if ($NF == "e") count++ } END { print sum+0, count+0 }' file
如果计数器根本没有增加,则块+0
中的可以END
确保输出将为空而不是空。0