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

34
42
11
6
2
99
...

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


当前回答

cat nums | perl -ne '$sum += $_ } { print $sum'

(和brian d foy的回答一样,没有“END”)

其他回答

这是另一个:

open(FIL, "a.txt");

my $sum = 0;
foreach( <FIL> ) {chomp; $sum += $_;}

close(FIL);

print "Sum = $sum\n";

另一个是为了好玩

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解决方案可能是最好的,因为它最紧凑。

这是另一个简单的句子

( echo 0 ; sed 's/$/ +/' foo ; echo p ) | dc

这假设数字是整数。如果你需要小数,试试

( echo 0 2k ; sed 's/$/ +/' foo ; echo p ) | dc

将2调整为所需的小数数。

sed ':a;N;s/\n/+/;ta' file|bc

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

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

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

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