读书人

寻求对文件中若干数值进行累加不用循

发布时间: 2012-03-13 11:21:11 作者: rapoo

寻求对文件中若干数值进行累加,不用循环的方法
使用命令行工具,如果不用循环的方法能不能对下面文件的每一行进行累加呢:

ora_file.txt:

1
10
12
14
56
78

2
3
5
7
8

上面的文件每几行中间有一个空行分隔,我现在要统计1+10+12+...+78 以及 2+3+5...+8的结果,并且输出成如下形式:

结果1

结果2

如果不用循环大家有什么好的办法呢

另外,如果咱们简化一下这个问题,只计算文件中所有数值相加(1+10+12...+8),有没有一个工具呢。

在网上查询AWK写的一个方法带有循环:

#!/usr/bin/awk -f

BEGIN {
RS="" #将多行记录的分隔符定为一个空行
}

{
sum=0 #定义一个表示总和的变量,初值为0
for(i=1;i<=NF;i++){ #遍历所有字段
sum += $i #累加每个字段的值
}
print sum
}


但是效率相当不满意,求高效方法 :)

非常感谢大家!



[解决办法]
原来也不能用awk的这种循环方法。估计你的文件很大。那自己写一个小程序。

估计效率也不好怎么处理。
[解决办法]
如果是使用gawk,可以设置RS="\0",把整个文件当作一个记录读入,看看看效率如何?
[解决办法]

Perl code
$ awk '/^[ \t]*$/&&sum!=0{print "sum:"sum;sum=0;next}{sum+=$1}' testsum:171sum:25
[解决办法]
awk 的效率还不满意,现在耗时如何?
[解决办法]
这样试试呢
按照你的简化要求

echo `tr -s '\n' '+' < yourfile` 0 |bc -l

读书人网 >UNIXLINUX

热点推荐