【问题标题】:How to count all numbers in a file with awk?如何用awk计算文件中的所有数字?
【发布时间】:2016-05-17 20:41:58
【问题描述】:

我想计算文件中的所有数字。

例子:

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

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

【问题讨论】:

    标签: linux bash awk


    【解决方案1】:

    从这个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 的使用 分裂。

    【讨论】:

    • 我能再问你一个关于 awk 的问题吗? (:
    • @MikeJames 是的,但它可能值得asking another question
    【解决方案2】:
    $ cat data
    Hi, this is 25 ...
    Lalala 21 or 29 what is ... 79?
    $ grep -oP '\b\d+\b' data | paste -s -d '+' | bc
    154
    

    【讨论】:

      【解决方案3】:

      使用grepawk

      $ 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 不能。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2021-09-10
      相关资源
      最近更新 更多