在文本文件中添加所有行的值?

时间:2016-12-09 17:11:43

标签: python bash perl shell math

我有一个看起来像这样的文本文件:

0,5
3,100
30,90

对于每一行,我需要从第二列的值中减去第一列的值,然后添加1.然后将每行相加。对于上面的例子:

5-0+1 = 6
100-3+1 = 98
90-30+1 = 61

然后我只是将这些数字加起来:6+98+61 = 165

我试图得到的最终结果是数字165。只要遵循上面的相同逻辑,我真的不在乎它是否以不同的方式完成。我只是想找出最好的方法。

该文本文件包含大约1500万行文本。第二个数字总是高于或等于第一个数字,所以你永远不必担心负面数字。

我可以用最好的语言来做这件事,只要它不需要安装额外的(非默认)模块。任何例子也会受到赞赏。

我主要担心的是它处理了1500万行,我需要它尽可能快,而且我对编码语言不太熟悉,知道哪种行最有效。

2 个答案:

答案 0 :(得分:1)

这是我的头脑,但我认为awk是一个潜在的解决方案(假设数字在numbers.txt中):

awk -F, '{tot += $2 - $1 + 1} END{print tot}' < numbers.txt

-F,告诉awk逗号是分隔符,tot默认为0,默认情况下,END是一个awk关键字,表示执行代码块在数据被击中EOF之后。

Awk并不是武器库中最快的武器,但我会试一试,因为它适合在一条线上!

答案 1 :(得分:1)

在perl中,我这样做:

#!/usr/bin/env perl
use strict;
use warnings;

my $sum;
while ( <> ) { 
   m/(\d+),(\d+)/;
   $sum += $2 - $1 + 1;
}
print $sum;

哪个单线作为;

perl -F',' -lane '$sum += $F[1] - $F[0] + 1; END { print $sum }'