我有一个文件包含很多行,比如 100 万行,并且cat the_file
滚动需要花费太多时间。
$ time cat 1m
......
cat 1m 0.00s user 11.21s system 28% cpu 38.839 total
如何让它更快?比如 xterm 或 urxvt 的 jumpScroll 选项?
我使用的是 PuTTY 0.62 和 Windows 8 CP,如果需要 Windows 7,我可以更改。
这是我用来生成文件的代码:
#include <stdio.h>
int
main(void) {
int i;
for (i = 2; i < 999999; i++) {
printf("%d\n", i);
}
return 0;
}
答案1
你不能。这就是为什么我们不应该从内部循环将日志记录到 stdout。
有意义的日志记录可以通过模数运算来实现,但我从您的评论中得知,您询问的是是否可以加快腻子的速度。
打印到 stdout 本质上就是查看文件。将数据“盲目”地写入文件会快得多,但您体验到的这种时间滞后相当恒定。
答案2
1. 使用支持 Jumpscroll 的程序
例如 Vandyke 软件的 SecureCRT 具有一些类似的功能。
2. 为目标选择更好的解决方案
让一个人在 38 秒内阅读 1000000 行文本是绝对不合理的。你可能想要:
- 持续进展的可见指标(表明该计划仍在进行中)
- 如果程序似乎已暂停或停止,则访问最后 20 行左右的文本。
通常只需将输出重定向到文件即可。您可以监视文件的大小以查看它是在增长还是静止。
如果有必要,我会编写一个小脚本,从 STDIN 读取行,将点写入 STDOUT(例如,每 n 行一个点,或者如果在过去 1/n 秒内在 STDIN 上有输入,则写入一个点)并保留最后 20 行以便在某些情况下显示(EOF、收到信号等)