【发布时间】:2016-05-17 20:41:58
【问题描述】:
我想计算文件中的所有数字。
例子:
input -> Hi, this is 25 ...
input -> Lalala 21 or 29 what is ... 79?
输出应该是所有数字的总和:154(即 25+21+29+79)。
【问题讨论】:
我想计算文件中的所有数字。
例子:
input -> Hi, this is 25 ...
input -> Lalala 21 or 29 what is ... 79?
输出应该是所有数字的总和:154(即 25+21+29+79)。
【问题讨论】:
从这个beautiful answer by 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 的使用 分裂。
【讨论】:
$ cat data
Hi, this is 25 ...
Lalala 21 or 29 what is ... 79?
$ grep -oP '\b\d+\b' data | paste -s -d '+' | bc
154
【讨论】:
使用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 不能。