我有一个非常大的文件(~10 GB),可以压缩到< 1 GB使用gzip。我有兴趣使用sort FILE | uniq -c |排序以查看单行重复的频率,但10 GB文件太大而无法排序,而且我的计算机内存不足。
有没有办法压缩文件,同时保留换行符(或者一个完全不同的方法),这会将文件缩小到足够小的大小以进行排序,但仍然使文件处于可排序的状态?
或者在大文件中找到/计算每行重复多少次的任何其他方法(~10 GB类似CSV的文件)?
感谢您的帮助!
答案 0 :(得分:2)
你确定你的sort
用尽了内存(RAM?)吗?
我调试sort
问题的经验让我相信你可能已经耗尽sort
的磁盘空间来创建临时文件。还记得用于排序的磁盘空间通常是/tmp
或/var/tmp
。
请使用以下方法检查可用磁盘空间:
df -g
(某些系统不支持-g,请尝试-m(megs)-k(kiloB))
如果你有一个尺寸不足的/tmp
分区,你有另一个10-20GB免费的分区吗?如果是,那么告诉你的那种方法与
sort -T /alt/dir
请注意,对于排序版本
sort (GNU coreutils) 5.97
帮助说
-T, --temporary-directory=DIR use DIR for temporaries, not $TMPDIR or /tmp;
multiple options specify multiple directories
我不确定这种方法是否可以组合一堆-T=/dr1/ -T=/dr2 ...
来获取你的10GB * sortFactor空间。我的经验是它只使用了列表中的最后一个目录,所以尽量使用足够大的1目录。
另外,请注意,您可以转到用于排序的任何目录,并且您将看到用于排序的临时文件的效果。
我希望这会有所帮助。
当您在S.O.看来是新用户时,请允许我欢迎您,并提醒您我们做的四件事:
。 1)Read the FAQs
。 2)请按checkmark sign接受最能解决问题的答案(如果有的话)。这为受访者提供了15分的最佳答案。它不会从您的声誉点中减去(有些人似乎认为); - )
。 3)当你看到好的Q& A时,使用gray triangles投票,因为系统的可信度是基于用户通过分享他们的知识而获得的声誉。
。 4)当你得到帮助时,尽量给予帮助,回答你所在专业领域的问题
答案 1 :(得分:0)
有一些可能的解决方案:
1 - 使用任何文本处理语言(perl,awk)提取每一行并保存该行的行号和散列,然后比较散列
2 - 可以/想要删除重复的行,每个文件只留下一个?可以使用脚本(命令),如: awk'!x [$ 0] ++'oldfile> newfile中
3 - 为什么不拆分文件但有一些标准?假设你的所有行以字母开头: - 在20个较小的文件中中断你的original_file:grep“^ a * $”original_file>一份文件 - 对每个小文件进行排序:a_file,b_file等 - 验证重复项,计算它们,做任何你想做的事。