如何使用awk计算文件中的所有数字?

3

我希望能够统计一个文件中的所有数字。

示例:

input -> Hi, this is 25 ...
input -> Lalala 21 or 29 what is ... 79?

输出应该是所有数字的总和:154(即25+21+29+79)。
3个回答

4

根据hek2mgl在这个精美的答案中所述,如何从文件中提取最大的数字,让我们捕获文件中的所有数字并将它们相加:

$ awk '{for(i=1;i<=NF;i++){sum+=$i}}END{print sum}' RS='$' FPAT='-{0,1}[0-9]+' file
154

这将以一种方式设置记录分隔符,使整个文本块成为唯一记录。然后,它设置FPAT,使每个单独的数字(正数或负数)成为不同的字段:

FPAT #

一个正则表达式(作为字符串),告诉 gawk 根据与正则表达式匹配的文本创建字段。为 FPAT 分配值会覆盖使用 FS 和 FIELDWIDTHS 进行字段拆分。


我可以问你关于awk的另一个问题吗?(: - Dmytro Tretiakov
@MikeJames 是的,但是最好还是提出另一个问题 - fedorqui

1
$ cat data
Hi, this is 25 ...
Lalala 21 or 29 what is ... 79?
$ grep -oP '\b\d+\b' data | paste -s -d '+' | bc
154

1
使用 `grep` 和 `awk` 命令:
$ cat test.txt
Hi, this is 25 ...
Lalala 21 or 29 what is ... 79?
$ grep '[0-9]\+' -o test.txt | awk '{ sum+=$1} END {print sum}'
154

不要这样做。grep 不能做任何 awk 不能做的事情。 - Michael Vehrs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接