我有一个包含数千个数字的文件,每个数字都在自己的行上:
34
42
11
6
2
99
...
我想写一个脚本,它将打印文件中所有数字的总和。我有一个解决办法,但不是很有效。(运行需要几分钟。)我在寻找一个更有效的解决方案。有什么建议吗?
我有一个包含数千个数字的文件,每个数字都在自己的行上:
34
42
11
6
2
99
...
我想写一个脚本,它将打印文件中所有数字的总和。我有一个解决办法,但不是很有效。(运行需要几分钟。)我在寻找一个更有效的解决方案。有什么建议吗?
当前回答
用+替换所有的新行,加一个0并把它发送给Ruby解释器不是更容易吗?
(sed -e "s/$/+/" file; echo 0)|irb
如果你没有irb,你可以把它发送到bc,但是你必须删除所有的换行符,除了最后一个(echo)。最好使用tr,除非您拥有sed的博士学位。
(sed -e "s/$/+/" file|tr -d "\n"; echo 0)|bc
其他回答
对于这样的任务,我更喜欢使用GNU数据集,因为它比perl或awk更简洁易读。例如
datamash sum 1 < myfile
其中1表示数据的第一列。
tcl中的一个:
#!/usr/bin/env tclsh
set sum 0
while {[gets stdin num] >= 0} { incr sum $num }
puts $sum
您可以使用Alacon -命令行实用程序为Alasql数据库。
它与Node.js一起工作,所以你需要安装Node.js,然后安装Alasql包:
要从TXT文件中计算总和,您可以使用以下命令:
> node alacon "SELECT VALUE SUM([0]) FROM TXT('mydata.txt')"
这是另一个:
open(FIL, "a.txt");
my $sum = 0;
foreach( <FIL> ) {chomp; $sum += $_;}
close(FIL);
print "Sum = $sum\n";
你可以使用awk:
awk '{ sum += $1 } END { print sum }' file