从 grep 的结果中添加数字

Ami*_*ani 33 shell grep bash

我运行以下命令:

grep -o "[0-9] errors" verification_report_3.txt | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:

1
4
0
8
Run Code Online (Sandbox Code Playgroud)

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

Sha*_*off 47

grep -o "[0-9] errors" verification_report_3.txt | awk '{ SUM += $1} END { print SUM }'
Run Code Online (Sandbox Code Playgroud)

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

grep -o "[0-9] errors" verification_report_3.txt | awk '{ SUM += $1; print $1} END { print SUM }'
Run Code Online (Sandbox Code Playgroud)

  • @Amir Afghani 另外,您可能希望将 grep 更改为 `"[0-9]\+ errors"`。如果您有一行报告 >9 个错误,这将匹配。 (4认同)
  • @Amir 您将使用第一个这样的 `variable=$(grep -o "[0-9] errors" verify_report_3.txt | awk '{ SUM += $1} END { print SUM }')` 这将输出将命令(仅是总和值)放入名为“variable”的变量中 (2认同)

Tre*_*ner 12

这也可以在 awk 中完成:

awk '"[0-9]+ errors" {sum += $1}; END {print sum}' verification_report_3.txt
Run Code Online (Sandbox Code Playgroud)


小智 6

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

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

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

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

awk 'END { print s }
/[0-9]+[[:space:]]+errors/ { 
  s += $1 
  }' infile
Run Code Online (Sandbox Code Playgroud)