我有一个看起来像这样的文本文件:
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万行,我需要它尽可能快,而且我对编码语言不太熟悉,知道哪种行最有效。
答案 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 }'