【问题标题】:Arithmetic in Shell scriptShell脚本中的算术
【发布时间】:2019-08-12 07:41:45
【问题描述】:

执行后

ta=`zcat abc.log.2019071814.gz |grep "R_MT"|grep "A:1234"|grep "ID:413"|awk -F"|" '{print $20}'|sort|uniq -c|awk '{$1=$1};1'`

这里 $20 表示每行中的“S:”条目(我正在获取所有 s 值的唯一计数),我得到的结果为

93070 S:1 11666 S:8 230 S:9

所以我需要的是所有出现的 s 值的总和。即 93070+11666+230 所以结果总计=104966

【问题讨论】:

标签: linux shell awk


【解决方案1】:
$ echo 93070 S:1 11666 S:8 230 S:9 | sed -E 's,S:[0-9]+,,g' | sed 's,  ,+,g'  | bc -
104966

【讨论】:

    【解决方案2】:

    附加到您最后的awk

    | awk '{sum+=$1} END {print sum}'
    

    或使用它(awk 忽略具有 S:1、S:8 和 S:9 的列):

    echo $ta | awk '{for(i=1;i<=NF;i++) t+=$i; print t; t=0}'
    

    或使用每隔一列:

    echo $ta | awk '{for(i=1;i<=NF;i=i+2) t+=$i; print t; t=0}'
    

    【讨论】:

      【解决方案3】:

      我不会一直帮你,但要知道你可以使用bc 来进行算术运算。

      echo "93070 + 11666 + 230" | bc
      

      会给你:

      104966
      

      【讨论】:

      • 在此基础上,还值得知道$(()) 可以用于例如result=$(($x + $y))
      猜你喜欢
      • 2019-12-16
      • 2011-03-02
      • 1970-01-01
      • 2020-02-13
      • 2011-07-21
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多