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

34
42
11
6
2
99
...

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


当前回答

到目前为止,没有一个解决方案使用浆糊。这里有一个:

paste -sd+ filename | bc

如果文件有一个尾随换行符,尾随+将导致语法错误。通过移除后面的+来修复错误:

paste -sd+ fiilename | sed 's/+$//g' | bc

例如,计算Σn,其中1<=n<=100000:

$ seq 100000 | paste -sd+ | bc -l
5000050000

(对于好奇的人来说,seqn会在给定正数n的情况下打印从1到n的数字序列。)

其他回答

$ perl -MList::Util=sum -le 'print sum <>' nums.txt

你可以使用awk:

awk '{ sum += $1 } END { print sum }' file
sed ':a;N;s/\n/+/;ta' file|bc

tcl中的一个:

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

更简洁:

# Ruby
ruby -e 'puts open("random_numbers").map(&:to_i).reduce(:+)'

# Python
python -c 'print(sum(int(l) for l in open("random_numbers")))'