【发布时间】:2012-09-08 01:03:59
【问题描述】:
如何获取大文件的行数,至少5G。使用 shell 的最快方法。
【问题讨论】:
-
如果
wc -l太慢了,没有什么比这更快了。
如何获取大文件的行数,至少5G。使用 shell 的最快方法。
【问题讨论】:
wc -l 太慢了,没有什么比这更快了。
Step 1: head -n filename > newfile // 将前 n 行放入 newfile,e.g. n =5
第 2 步:获取巨大的文件大小,A
第 3 步:获取新文件大小,B
第 4 步:(A/B)*n 大约等于确切的行数。
将n设置为不同的值,多做几次,然后取平均值。
【讨论】:
wc -l 大约需要 90 秒。
最快的方法可能是wc -l。
wc 命令已经过优化,可以做这种事情。您可以做的任何其他事情(除了在更强大的硬件上进行)都不太可能更快。
是的,计算 5 GB 文本文件中的行数很慢。文件很大。
唯一的选择是首先以某种不同的格式存储数据,可能是数据库,也可能是具有固定长度记录的文件。将您的 5 GB 文本文件转换为其他格式会导致 至少 与在其上运行 wc -l 一样错误,但如果您愿意,可能值得会大量计算行数。如果没有更多信息,就不可能说出权衡是什么。
【讨论】:
wc 在第一次调用该文件时花费了相对较短的时间,而在以后使用相同文件作为输入的调用时大约需要 2 秒。
sudo sh -c "echo 3 > /proc/sys/vm/drop_caches"清空缓存后,按照here的建议,wc -l第一次调用4.3G文件耗时1m31s。
sed -n '$=' 花了 1m33s,所以基本相同。