我有一个很大的文本文件(475,000,000 行)。我想在不读取文件的情况下快速获取文件中的行数。
fread
来自 data.table
实际上在它继续读取整个文件之前相当快地(大约 10 秒)得出了行号:
fread('D:/text_file.txt',select=1,colClasses="character")
Read 7.1% of 472933221 rows #number of rows appears after 10 seconds
有没有办法在不读取整个文件的情况下提取这个行号?作为记录,读取整个文件需要 36 秒。
我尝试了 R.utils
中的 countLines
,但需要 53 秒。不同之处可能在于 fread
有一个选项可以只选择一列,而 countLines 会读取所有内容。
R.utils::countLines("D:/text_file.txt") #53 seconds
我也尝试过其他 Windows 方法,例如:
find /v /c "" "D:\text_file.txt" #takes 1 minute 50 seconds
grep "^" D:\text_file.txt | wc -l #takes 2 minutes
这些可以工作,但它们不如 fread
快。我在 Windows 上。
最佳答案
@d.b 要求我详细回答我自己的问题。作为@G。 Grothendieck 建议,答案是使用 wc
,它是 Rtools 的一部分,用于在 Microsoft Windows 下为 R 构建包的资源集合。
安装后,确保 C:\Rtools\bin
位于 Windows 环境变量的 PATH
中。
然后,wc
可用于 R 使用 system
或 shell
:
shell('wc -l "D:/text_file.txt"',intern =TRUE)
关于r - 从 fread 中提取行数而不读取整个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47369687/