我正在寻找一个命令,它将接受多行文本作为输入,每行包含一个整数,并输出这些整数的总和。
背景说明:我有一个日志文件,其中包括时间测量。通过grep相关行和一些sed
重新格式化,我可以列出该文件中的所有计时。我想计算出总时间。我可以将此中间输出传输到任何命令以进行最终求和。我过去总是使用expr
,但是除非它以RPN模式运行,否则我认为它无法处理这个问题(即使是在RPN模式下也很棘手)。
如何获得整数的总和?
我正在寻找一个命令,它将接受多行文本作为输入,每行包含一个整数,并输出这些整数的总和。
背景说明:我有一个日志文件,其中包括时间测量。通过grep相关行和一些sed
重新格式化,我可以列出该文件中的所有计时。我想计算出总时间。我可以将此中间输出传输到任何命令以进行最终求和。我过去总是使用expr
,但是除非它以RPN模式运行,否则我认为它无法处理这个问题(即使是在RPN模式下也很棘手)。
如何获得整数的总和?
Miller工具对于这个任务来说绝对是过度杀伤力,但是 1)为了完整性我们把它们放在这里;2)它们可能在进一步处理中派上用场:
% seq 10 | mlr stats1 -a sum -f 1
1_sum=55
sum = 0
file = open("numbers.txt","R")
for line in file.readlines(): sum+=int(line)
file.close()
print sum
我还没有测试过这个代码,但它看起来是正确的。只需将numbers.txt更改为文件名,将代码保存到名为sum.py的文件中,在控制台中键入"python sum.py"
Rebol中的一行代码:
rebol -q --do 's: 0 while [d: input] [s: s + to-integer d] print s' < infile.txt
不幸的是,以上代码在 Rebol 3 中还不能正常工作(INPUT 无法流式传输 STDIN)。
因此,在这里提供一个临时解决方案,也适用于 Rebol 3:
rebol -q --do 's: 0 foreach n to-block read %infile.txt [s: s + n] print s'
#include <iostream>
int main()
{
double x = 0, total = 0;
while (std::cin >> x)
total += x;
if (!std::cin.eof())
return 1;
std::cout << x << '\n';
}
f(n) := n x ( n + 1 ) / 2
f( high-side ) - \
f( low-side - 1 )
awk
非常快,但直接计算仍然比求和要快得多: ( time ( jot - 19495729 21895729 | pvE0 |
mawk2 '{ __+=$_ } END { print __ }' ))
sleep 0.5
( time ( echo '19495729 21895729' | pvE0 |
mawk2 '
function __(___, _) {
return \
_ * ((_ + (_^=_<_)) * (\
_/= _+_)) - ___ * _ * --___
}
BEGIN {
CONVFMT = "%.250g"
OFS = ORS } ($!NF = __($1, $2))^_' ))
in0: 20.6MiB 0:00:00 [49.4MiB/s] [49.4MiB/s] [ <=>]
( jot - 19495729 21895729 | pvE 0.1 in0 | mawk2 '{ __+=$_ } END { print __ }')
0.59s user 0.03s system 141% cpu 0.440 total
1 49669770295729 0x2D2CA503B9B1
in0: 18.0 B 0:00:00 [ 462KiB/s] [ 462KiB/s] [<=>]
( echo '19495729 21895729' | pvE 0.1 in0 | mawk2 ; )
0.00s user 0.01s system 62% cpu 0.024 total
1 49669770295729 0x2D2CA503B9B1
** 代码将/ 2
从高侧保存,以便可以执行低侧* 0.5
简单的 PHP
cat numbers.txt | php -r "echo array_sum(explode(PHP_EOL, stream_get_contents(STDIN)));"
好的,以下是如何在PowerShell中完成(PowerShell核心,在Windows、Linux和Mac上都可以使用)
Get-Content aaa.dat | Measure-Object -Sum