ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [20191028]数值累加的各种方法2.txt

[20191028]数值累加的各种方法2.txt

原创 Linux操作系统 作者:lfree 时间:2019-10-28 19:45:22 0 删除 编辑

[20191028]数值累加的各种方法2.txt

--//前一阵子做了数值累加的测试,链接:http://blog.itpub.net/267265/viewspace-2660877/
--//当时的条件是每行1个数值的情况,如果存在多个数值的情况呢.继续测试.

$ cat -tv b.txt
301000.0000^I^I293000.0000
66000.0000   182000.0000^I98000.0000
252914.5300
235000.0000   300000.0000
330000.0000
--//^I表示<tab>

1.方法1使用awk:
$ awk '{for(i=1;i<=NF;i++) sum+=$i} END {printf("%.10f\n",sum)}' b.txt
2057914.5300000000

--//使用awk估计是最常用的方式.也是我不熟悉的方式.
--//awk还可以重新定义分隔符,我这里定义RS="[ \t\n]+",格式与正则表达式类似.

$ awk 'BEGIN{RS="[ \t\n]+"} {sum+=$1} END {printf("%.10f\n",sum)}' b.txt
2057914.5300000000

2.xargs方法,这个比较简单,不受1行多个数值的影响.
$ cat b.txt |xargs | sed 's/ /+/g' | bc
2057914.5300

$ cat b.txt |xargs | (sed -e 's/^/s+=/g'  a.txt ; echo s ) | bc
2057914.5300

3.其它方法可以先转化为1行1个数值,然后累加.
$ cat b.txt | (tr '\n\t\r\ ' '+' ; echo 0 ) | sed 's/+\+/+/g' | bc
2057914.5300

$ (cat b.txt |xargs -n 1 | sed -e 's/^/s+=/g' ;echo s ) | bc
2057914.5300

$ cat b.txt |xargs -n 1 | paste -sd+ | bc
2057914.5300

4.使用dc计算器:
--//bing检索,找到一个不用计算输入多少加号的方法.
$ cat b.txt | dc -f - -e '[+z1<r]srz1<rp'
2057914.5300

--//-e后面那一串什么意思,即使看了man dc文档,我也没看懂表示什么意思.
--//一般bash编程并不太讲究执行效率,有机会测试记录很多的情况,那种方式快一些.
--//也许还有许多方法.不在一一列举.有机会测试大量数据的情况.

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2661719/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4017
  • 访问量
    7994308