我有一个大小为 31 GB 的 XML 文件。我需要找到该文件中的总行数。我知道命令wc -l
会给我同样的。但是,执行此操作需要很长时间。有没有更快的机制来查找大文件中的行数?
6 回答
31 gigs 是一个非常大的文本文件。我敢打赌它会压缩到大约 1.5 gigs。我会以压缩格式创建这些文件,然后您可以通过 wc 流式传输文件的解压缩版本。这将大大减少用于处理此文件的 i/o 和内存量。gzip 可以读写压缩流。
但我也会发表以下评论:
- 由于元素之间的空格被忽略(混合内容除外),因此行号对于 XML 来说并不能提供真正的信息。关于数据集,您真正想知道什么?我敢打赌计算元素会更有用。
- 确保您的 xml 文件没有不必要的冗余,例如,您是否在整个文档中重复相同的命名空间声明?
- 也许 XML 不是表示此文档的最佳方式,如果它尝试查看类似Fast Infoset的内容
如果您只需要行数,wc -l
将与其他任何东西一样快。
问题是 31GB 的文本文件。
如果准确性不是问题,请找到平均行长度并将文件大小除以该长度。这样你就可以得到一个非常快速的近似值。(确保考虑使用的字符编码)
这超出了应该重构代码以完全避免您的问题的地步。一种方法是将文件中的所有数据放入元组存储数据库中。Apache couchDB 和 Intersystems Cache 是您可以为此使用的两个系统,并且将针对您正在处理的数据类型进行更好的优化。
如果你真的被 xml 文件卡住了,那么另一个选择是提前计算所有行并缓存这个值。每次从文件中添加或删除一行时,您都可以从文件中添加或减去一行。此外,请确保使用 64 位整数,因为可能有超过 2^32 行。
不,不是。wc
将得到很好的优化。31GB 是很多数据,无论您使用什么程序,将其读入计算行数都需要一段时间。
此外,这个问题并不适合 Stack Overflow,因为它根本与编程无关。
由于在 XML 中换行基本上只是一种装饰性的东西,所以计数行不是很不确定吗?计算特定标签的出现次数可能会更好。