我有一个500Mb的文件,我试图用sed操作。
一切正常我只是注意到它在内存中读取并处理所有内容然后立即输出所有内容。对于这么大的文件,这是自然行为吗?
我希望在完成后继续下一行输出每一行。
答案 0 :(得分:1)
可以使用不同的缓冲“模式”;通常,当输出到达终端(程序可以通过isatty(STDOUT_FILENO)
检测到)时,使用行缓冲输出。我假设您正在运行您的sed脚本并反复查看输出并注意到它有点“一下子”出现。这并不意味着sed将所有东西都加载到内存中 - sed是一个面向行的程序,几乎可以肯定它是逐行处理你的输入。如果sed的输出是一个文件,那么文件以大块填充是正常的和预期的,因为这样的方式更有效,当没有人看到输出时(再次,因为isatty返回false)。 p>
答案 1 :(得分:1)
在某些版本的sed上,您可以使用选项-u
来处理流版本。
AIX sed
-u
从输入文件加载最少量的数据并更频繁地刷新输出缓冲区
GNU sed
-u'
- 无缓冲'Buffer both input and output as minimally as practical. (This is particularly useful if the input is coming from the likes of `tail -f', and you wish to see the transformed output as soon as possible.)