我有一个包含数千个数字的文件,每个数字都在自己的行上:
34
42
11
6
2
99
...
我想写一个脚本,它将打印文件中所有数字的总和。我有一个解决办法,但不是很有效。(运行需要几分钟。)我在寻找一个更有效的解决方案。有什么建议吗?
我有一个包含数千个数字的文件,每个数字都在自己的行上:
34
42
11
6
2
99
...
我想写一个脚本,它将打印文件中所有数字的总和。我有一个解决办法,但不是很有效。(运行需要几分钟。)我在寻找一个更有效的解决方案。有什么建议吗?
当前回答
我还没有测试,但它应该工作:
cat f | tr "\n" "+" | sed 's/+$/\n/' | bc
如果bc不处理EOF和EOL,你可能必须在bc之前添加“\n”到字符串(比如通过echo)…
其他回答
这是直接的Bash:
sum=0
while read -r line
do
(( sum += line ))
done < file
echo $sum
这是另一个简单的句子
( echo 0 ; sed 's/$/ +/' foo ; echo p ) | dc
这假设数字是整数。如果你需要小数,试试
( echo 0 2k ; sed 's/$/ +/' foo ; echo p ) | dc
将2调整为所需的小数数。
只是为了好玩,让我们用PDL (Perl的数组数学引擎)来做!
perl -MPDL -E 'say rcols(shift)->sum' datafile
rcols将列读入矩阵(在本例中为1D), sum (surprise)对矩阵中的所有元素求和。
我更喜欢用R来表示:
$ R -e 'sum(scan("filename"))'
这是另一个:
open(FIL, "a.txt");
my $sum = 0;
foreach( <FIL> ) {chomp; $sum += $_;}
close(FIL);
print "Sum = $sum\n";