Din*_*yan 1 command-line scripts
我有一个名为 numbers.txt 的文件。包含一些这样的数字
1568
14578
2365
41655
9965
...
...
Run Code Online (Sandbox Code Playgroud)
我需要对这些数字求和。我如何使用 shell 脚本来解决这个问题?
如果您的文件很大(例如seq 1 100000000 > numbers.txt),传统工具就会开始崩溃。
awk '{s+=$1} END {print s} 需要 34 秒,但“0%”RAM(不确定这是否准确)perl -nle '$sum += $_ } END { print $sum' numbers.txt 花了 27 秒和少量的 RAM。pypy相同的 RAM运行时需要 23s )numsum是可怕的; 它需要 9m43s 和 14GB 的 RAM 才能给出一个指数数(其他人用完整的长整数回答)我提供的替代方案可以在 6.4 秒内添加一亿个整数......
...但它是用 C 编写的。 Easy C. 没有奇怪的构建要求,或者理解它所需的程度,但你必须编译它并且文件名被硬编码到其中(你可以修复)......
#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;
}
Run Code Online (Sandbox Code Playgroud)
将其另存为类似add.c, runmake add然后./add运行。