我有一个包含数千个数字的文件,每个数字都有自己的行:
34
42
11
6
2
99
...
我想写一个脚本,将打印文件中所有数字的总和.我有一个解决方案,但效率不高.(运行需要几分钟.)我在寻找一个更有效的解决方案.有什么建议吗?
我有一个包含数千个数字的文件,每个数字都有自己的行:
34
42
11
6
2
99
...
我想写一个脚本,将打印文件中所有数字的总和.我有一个解决方案,但效率不高.(运行需要几分钟.)我在寻找一个更有效的解决方案.有什么建议吗?
对于Perl one liner,它与Ayman Hourieh's answer中的awk
解决方案基本相同:
% perl -nle '$sum += $_ } END { print $sum'
如果您对Perl one Liner的功能感到好奇,可以对其进行深入研究:
% perl -MO=Deparse -nle '$sum += $_ } END { print $sum'
结果是该程序的版本更加冗长,没有人会自己编写:
BEGIN { $/ = "\n"; $\ = "\n"; }
LINE: while (defined($_ = <ARGV>)) {
chomp $_;
$sum += $_;
}
sub END {
print $sum;
}
-e syntax OK
只是为了好玩,我用了一个包含mmap
0000个数字(范围0-9999)的文件.在我的Mac Pro上,它几乎会立即返回.这太糟糕了,因为我希望使用mmap
会非常快,但这只是同一时间:
use 5.010;
use File::Map qw(map_file);
map_file my $map, $ARGV[0];
$sum += $1 while $map =~ m/(\d+)/g;
say $sum;