我有一个包含数千个数字的文件,每个数字都在自己的行上:

34
42
11
6
2
99
...

我想写一个脚本,它将打印文件中所有数字的总和。我有一个解决办法,但不是很有效。(运行需要几分钟。)我在寻找一个更有效的解决方案。有什么建议吗?


当前回答

您可以使用Alacon -命令行实用程序为Alasql数据库。

它与Node.js一起工作,所以你需要安装Node.js,然后安装Alasql包:

要从TXT文件中计算总和,您可以使用以下命令:

> node alacon "SELECT VALUE SUM([0]) FROM TXT('mydata.txt')"

其他回答

tcl中的一个:

#!/usr/bin/env tclsh
set sum 0
while {[gets stdin num] >= 0} { incr sum $num }
puts $sum

Ruby:

ruby -e "File.read('file.txt').split.inject(0){|mem, obj| mem += obj.to_f}"
sed ':a;N;s/\n/+/;ta' file|bc

另一个是为了好玩

sum=0;for i in $(cat file);do sum=$((sum+$i));done;echo $sum

或者再来一次

s=0;while read l; do s=$((s+$l));done<file;echo $s

但awk解决方案可能是最好的,因为它最紧凑。

c++“俏皮话”:

#include <iostream>
#include <iterator>
#include <numeric>
using namespace std;

int main() {
    cout << accumulate(istream_iterator<int>(cin), istream_iterator<int>(), 0) << endl;
}