我有一个包含数千个数字的文件,每个数字都在自己的行上:
34
42
11
6
2
99
...
我想写一个脚本,它将打印文件中所有数字的总和。我有一个解决办法,但不是很有效。(运行需要几分钟。)我在寻找一个更有效的解决方案。有什么建议吗?
我有一个包含数千个数字的文件,每个数字都在自己的行上:
34
42
11
6
2
99
...
我想写一个脚本,它将打印文件中所有数字的总和。我有一个解决办法,但不是很有效。(运行需要几分钟。)我在寻找一个更有效的解决方案。有什么建议吗?
当前回答
Perl 6
say sum lines
~$ perl6 -e '.say for 0..1000000' > test.in
~$ perl6 -e 'say sum lines' < test.in
500000500000
其他回答
这是另一个:
open(FIL, "a.txt");
my $sum = 0;
foreach( <FIL> ) {chomp; $sum += $_;}
close(FIL);
print "Sum = $sum\n";
考虑到你需要通读整个文件,我不知道你是否能找到比这更好的。
$sum = 0;
while(<>){
$sum += $_;
}
print $sum;
sed ':a;N;s/\n/+/;ta' file|bc
cat nums | perl -ne '$sum += $_ } { print $sum'
(和brian d foy的回答一样,没有“END”)
Bash变体
raw=$(cat file)
echo $(( ${raw//$'\n'/+} ))
$ wc -l file
10000 file
$ time ./test
323390
real 0m3,096s
user 0m3,095s
sys 0m0,000s
这里发生了什么?读取一个文件的内容到$raw var中,然后通过将所有新行更改为“+”来从该var创建数学语句