我想统计文件中的所有数字。
例:
input -> Hi, this is 25 ... input -> Lalala 21 or 29 what is ... 79?
输出应该是所有数字的总和: 154
(即25 + 21 + 29 + 79)。
从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