我有一个包含数千个数字的文件,每个数字都在自己的行上:
34
42
11
6
2
99
...
我想写一个脚本,它将打印文件中所有数字的总和。我有一个解决办法,但不是很有效。(运行需要几分钟。)我在寻找一个更有效的解决方案。有什么建议吗?
我有一个包含数千个数字的文件,每个数字都在自己的行上:
34
42
11
6
2
99
...
我想写一个脚本,它将打印文件中所有数字的总和。我有一个解决办法,但不是很有效。(运行需要几分钟。)我在寻找一个更有效的解决方案。有什么建议吗?
当前回答
cat nums | perl -ne '$sum += $_ } { print $sum'
(和brian d foy的回答一样,没有“END”)
其他回答
sed ':a;N;s/\n/+/;ta' file|bc
这是另一个:
open(FIL, "a.txt");
my $sum = 0;
foreach( <FIL> ) {chomp; $sum += $_;}
close(FIL);
print "Sum = $sum\n";
下面是一个使用python和生成器表达式的解决方案。在我破旧的笔记本电脑上测试了无数个数字。
time python -c "import sys; print sum((float(l) for l in sys.stdin))" < file
real 0m0.619s
user 0m0.512s
sys 0m0.028s
c++“俏皮话”:
#include <iostream>
#include <iterator>
#include <numeric>
using namespace std;
int main() {
cout << accumulate(istream_iterator<int>(cin), istream_iterator<int>(), 0) << endl;
}
考虑到你需要通读整个文件,我不知道你是否能找到比这更好的。
$sum = 0;
while(<>){
$sum += $_;
}
print $sum;