我有一个包含数千个数字的文件,每个数字都在自己的行上:
34
42
11
6
2
99
...
我想写一个脚本,它将打印文件中所有数字的总和。我有一个解决办法,但不是很有效。(运行需要几分钟。)我在寻找一个更有效的解决方案。有什么建议吗?
我有一个包含数千个数字的文件,每个数字都在自己的行上:
34
42
11
6
2
99
...
我想写一个脚本,它将打印文件中所有数字的总和。我有一个解决办法,但不是很有效。(运行需要几分钟。)我在寻找一个更有效的解决方案。有什么建议吗?
当前回答
更简洁:
# Ruby
ruby -e 'puts open("random_numbers").map(&:to_i).reduce(:+)'
# Python
python -c 'print(sum(int(l) for l in open("random_numbers")))'
其他回答
$ perl -MList::Util=sum -le 'print sum <>' nums.txt
考虑到你需要通读整个文件,我不知道你是否能找到比这更好的。
$sum = 0;
while(<>){
$sum += $_;
}
print $sum;
用+替换所有的新行,加一个0并把它发送给Ruby解释器不是更容易吗?
(sed -e "s/$/+/" file; echo 0)|irb
如果你没有irb,你可以把它发送到bc,但是你必须删除所有的换行符,除了最后一个(echo)。最好使用tr,除非您拥有sed的博士学位。
(sed -e "s/$/+/" file|tr -d "\n"; echo 0)|bc
在shell中使用awk,我使用下面的脚本来这样做:
#!/bin/bash
total=0;
for i in $( awk '{ print $1; }' <myfile> )
do
total=$(echo $total+$i | bc )
((count++))
done
echo "scale=2; $total " | bc
你可以使用awk:
awk '{ sum += $1 } END { print sum }' file