我有一个包含数千个数字的文件,每个数字都有自己的行:

34
42
11
6
2
99
...

我想写一个脚本,将打印文件中所有数字的总和.我有一个解决方案,但效率不高.(运行需要几分钟.)我在寻找一个更有效的解决方案.有什么建议吗?

推荐答案

对于Perl one liner,它与Ayman Hourieh's answer中的awk解决方案基本相同:

 % perl -nle '$sum += $_ } END { print $sum'

如果您对Perl one Liner的功能感到好奇,可以对其进行深入研究:

 %  perl -MO=Deparse -nle '$sum += $_ } END { print $sum'

结果是该程序的版本更加冗长,没有人会自己编写:

BEGIN { $/ = "\n"; $\ = "\n"; }
LINE: while (defined($_ = <ARGV>)) {
    chomp $_;
    $sum += $_;
}
sub END {
    print $sum;
}
-e syntax OK

只是为了好玩,我用了一个包含mmap0000个数字(范围0-9999)的文件.在我的Mac Pro上,它几乎会立即返回.这太糟糕了,因为我希望使用mmap会非常快,但这只是同一时间:

use 5.010;
use File::Map qw(map_file);

map_file my $map, $ARGV[0];

$sum += $1 while $map =~ m/(\d+)/g;

say $sum;

Linux相关问答推荐

创建守护进程时打开0,1,2描述符

如何删除字符串中的`{{i:`and `}}`

在Linux中随机化txt文件但保证不重复行

如何在脚本中使用sudo修改其他用户的crontab

awk内部的变量操作

CMake:处理静态库和共享库的正确方法

Bash 更新 yaml 文件中的图像值

为什么 8 位字符串文字可以包含多字节字符,而 char 向量不能?

你如何在 CentOS9 上使用 C++ fmt?

如何从linux调度程序中屏蔽一个cpu(防止它调度线程到那个cpu上)?

给定两个目录树如何找到相同的文件?

XML 编辑/查看软件

仅在不存在时添加换行符

SVN 错误:无法将字符串从本机编码转换为UTF-8

如何查看安装的 pip 包大小?

Anaconda:禁用提示更改

如何在 Linux 上查找不包含文本的文本文件?

Docker:您是否try 连接到没有 TLS 的启用 TLS 的守护进程?

Anaconda 安装后,conda 命令失败并显示ImportError: no module named conda.cli

适用于 Windows、Linux、MacOS X 的跨平台脚​​本