【问题标题】:Bash script to add numbers from all files (each containing an integer) in a directory用于从目录中的所有文件(每个文件包含一个整数)中添加数字的 Bash 脚本
【发布时间】:2015-06-05 06:14:56
【问题描述】:

我在一个目录中有许多 .txt 文件。每个文件只有一个整数。 如何编写 bash 脚本来添加这些整数并将输出保存到文件中?

【问题讨论】:

    标签: bash shell awk


    【解决方案1】:

    只需遍历提取整数的文件,然后对它们求和:

    grep -ho '[0-9]*' files* | awk '{sum+=$1} END {print sum}'
    

    说明

    • grep -ho '[0-9]*' files* 从名称与files* 匹配的文件中提取数字。我们使用-h 来防止获取匹配的文件名,使用-o 来获取匹配,而不是整行。
    • awk '{sum+=$1} END {print sum}' 循环遍历来自 grep 的值并将它们相加。最后,打印结果。

    测试

    $ tail a*
    ==> a1 <==
    hello 23 asd
    asdfasfd
    
    ==> a2 <==
    asdfasfd
    is 15
    
    ==> a3 <==
    
    $ grep -ho '[0-9]*' a* | awk '{sum+=$1} END {print sum}'
    38
    

    【讨论】:

    【解决方案2】:

    您可以cat您的文件,然后使用awk进行总结:

    cat *.txt | awk '{x+=$0}END{print x}' > test.txt
    

    test.txt 应该包含总和。

    【讨论】:

      【解决方案3】:

      创建一些测试文件:

      $ for f in {a,b,c,d}.txt; do
      >   echo $RANDOM > "$f"
      > done
      
      $ cat *.txt
      18419
      25511
      31919
      28810
      

      使用 Bash 求和:

      $ i=0; 
      $ for f in *.txt; do 
      >   ((i+=$(<"$f")));
      > done
      $ echo $i
      104659
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-18
        • 2017-11-28
        • 2011-03-11
        • 1970-01-01
        • 2013-07-06
        • 2018-10-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多