if else 条件检查计数是否已增加

if else 条件检查计数是否已增加

我有一个 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|ccount该行的最后一列另外为 时递增e

awk '/a|b|c/ { ++sum; if ($NF == "e") count++ } END { print sum+0, count+0 }' file

如果计数器根本没有增加,则块+0中的可以END确保输出将为空而不是空。0

相关内容