Gep*_*ada 12 python random bash awk sed
我有一个13 GB的大文本文件,158,609,739行,我想随机选择155,000,000行.
我试图加扰文件,然后削减155000000第一行,但似乎我的ram内存(16GB)不足以做到这一点.我试过的管道是:
shuf file | head -n 155000000
sort -R file | head -n 155000000
Run Code Online (Sandbox Code Playgroud)
现在,而不是选择行,我认为是更高效的内存从文件中删除3,609,739个随机行,以获得155000000行的最终文件.
Mar*_*som 13
在将文件的每一行复制到输出时,请评估其应删除的概率.第一行应该有3,609,739/158,609,739被删除的机会.如果生成0到1之间的随机数且该数字小于该比率,请不要将其复制到输出中.现在第二线的赔率为3,609,738/158,609,738; 如果该行未被删除,则第三行的赔率为3,609,738/158,609,737.重复直到完成.
由于每个处理线的几率都会发生变化,因此该算法可确保精确的线数.一旦你删除了3,609,739,赔率就会降到零; 如果您在任何时候需要删除文件中的每个剩余行,则赔率为1.
Dar*_*Yin 10
您可以随时预先生成您计划删除的行号(未经替换选择的3,609,739个随机数列表),然后只需遍历文件并复制到另一个,根据需要跳过行.只要你有一个新文件的空间,这将是有效的.
你可以用random.sample
Eg 选择随机数,
random.sample(xrange(158609739), 3609739)
Run Code Online (Sandbox Code Playgroud)