Para imprimir somas parciais de inteiros dadas na entrada padrão, uma por linha:
#!/usr/bin/env python3
import sys
partial_sum = 0
for n in map(int, sys.stdin):
partial_sum += n
print(partial_sum)
Exemplo executável .
Se por algum motivo o comando for muito lento; você poderia usar o programa C:
#include <stdint.h>
#include <ctype.h>
#include <stdio.h>
int main(void)
{
uintmax_t cumsum = 0, n = 0;
for (int c = EOF; (c = getchar()) != EOF; ) {
if (isdigit(c))
n = n * 10 + (c - '0');
else if (n) { // complete number
cumsum += n;
printf("%ju\n", cumsum);
n = 0;
}
}
if (n)
printf("%ju\n", cumsum + n);
return feof(stdin) ? 0 : 1;
}
Para criar e executar, digite:
$ cc cumsum.c -o cumsum
$ ./cumsum < input > output
Exemplo executável .
UINTMAX_MAX
é 18446744073709551615
.
O código C é várias vezes mais rápido que o comando awk na minha máquina para o arquivo de entrada gerado por:
#!/usr/bin/env python3
import numpy.random
print(*numpy.random.random_integers(100, size=2000000), sep='\n')