8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

'uniq' 不对巨大的文本文件进行排序?

linxie 1月前

80 0

我有一个巨大的文本文件(截至今天已有 40 GB),我想在不对文件进行排序的情况下过滤出唯一的行。该文件有 unix 行尾,并且所有内容都匹配 [[:...

我有一个非常大的文本文件(截至今天已有 40 GB),我想过滤出唯一的行 而不对 文件进行排序。

该文件具有 unix 行结尾,并且所有内容都匹配 [[:print:]] 。我尝试使用以下 awk 脚本仅显示唯一行:

awk 'a[$0] {next} 1' stupid.txt > less_stupid.txt

我的想法是,通过引用数组元素来填充数组,使用文件内容作为键,然后跳过数组中已有的行。但这失败了,原因有两个:首先,它莫名其妙地不起作用(即使在小型测试文件上也是如此);其次,因为我知道在 awk 将整组唯一行加载到内存中之前,我的系统将耗尽内存。

经过搜索,我发现 这个答案 推荐:

awk '!x[$0]++'

虽然这适用于小文件,但在读取整个文件之前它也会耗尽内存。

有什么更好的(即可行的)解决方案?我对任何事情都持开放态度,但我更偏爱用我熟悉的语言(bash 和 awk,因此有标签)提供的解决方案。在尝试可视化问题时,我想到最好的办法是存储行校验和或 MD5 数组,而不是行本身,但这只能节省一点空间,并且存在校验和冲突的风险。

任何提示都非常欢迎。告诉我这是不可能的,我也欢迎,这样我就不用再去想了。:-P

帖子版权声明 1、本帖标题:'uniq' 不对巨大的文本文件进行排序?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由linxie在本站《csv》版块原创发布, 转载请注明出处!
最新回复 (0)
  • @user2117258。很高兴它有所帮助。您使用了建议的哪种方法?请注意,“bloom filter”方法可能会错误地删除一小部分(等于错误率 e)的非重复行。并行 + perl 方法将仅删除重复的行,但仅删除同一“chunk”(由并行中的 --block 100M 选项定义)中的行。如果重复的行足够接近,这将起作用。您可以多次重新运行该过程,最好使用不同的 --block 大小,以检测新块中先前错过的重复行。

返回
作者最近主题: