Se o seu arquivo é enorme (por exemplo, seq 1 100000000 > numbers.txt
), as ferramentas tradicionais começam a desmoronar.
-
awk '{s+=} END {print s}
leva 34s mas "0%" RAM (não tenho certeza se isso é preciso) -
perl -nle '$sum += $_ } END { print $sum' numbers.txt
levou 27s e uma pequena quantidade de RAM. -
Jacob's Python leva 47s e 6GB de RAM (e 23s quando executado com
pypy
, mesma RAM) -
numsum
era horrível ; demorou 9m43s e 14GB de RAM para dar um número exponencial (os outros responderam com inteiros longos) - Pure Bash levaria sempre-e-um-dia para loop por eles, então eu não estou tentando
A alternativa eu ofereço uma resposta que pode adicionar cem milhões de inteiros em 6,4 segundos ...
... Mas está escrito em C. Easy C. Não há requisitos estranhos para construir, ou grau necessário para compreendê-lo, mas você tem que compilá-lo e o nome do arquivo é codificado nele (o que você poderia corrigir) .. .
#include <stdio.h>
int main(void) {
FILE *fp;
char line[100];
unsigned long int total = 0;
fp = fopen("numbers.txt", "r");
while (fgets(line, 100, fp) != NULL) {
total += atoi(line);
}
fclose(fp);
printf("%li\n", total);
return 0;
}
Salve como algo como add.c
, execute make add
e, em seguida, ./add
para executar.