将 grep 结果中的数字相加

将 grep 结果中的数字相加

我运行以下命令:

grep -o "[0-9] errors" verification_report_3.txt | awk '{print $1}'

我得到以下结果:

1
4
0
8

我想将每个数字添加到一个运行计数变量中。有人可以帮我制作一种神奇的衬垫吗?

答案1

grep -o "[0-9] errors" verification_report_3.txt | awk '{ SUM += $1} END { print SUM }'

这不会打印列表,但会打印总和。如果您想要列表和总和,您可以这样做:

grep -o "[0-9] errors" verification_report_3.txt | awk '{ SUM += $1; print $1} END { print SUM }'

答案2

这也可以在 awk 中完成:

awk '"[0-9]+ errors" {sum += $1}; END {print sum}' verification_report_3.txt

答案3

您似乎正在使用GNU系统,所以如果珀尔正则表达式支持可用,您可以编写如下内容:

grep -Po '[0-9]+(?=\s+errors)' infile | 
  paste -sd+ | 
    bc

PS 我修改了正则表达式(添加了+量词)以允许数字> 9。

PS 或者,awk 就足够了(假设GNU awk):

awk 'END { print s }
/[0-9]+[[:space:]]+errors/ { 
  s += $1 
  }' infile

答案4

尝试将 grep 的输出通过管道传输到

awk 'BEGIN {total=0;}{total+=$1;}END {print "Total: ",total}'

相关内容