当前位置:  开发笔记 > 编程语言 > 正文

确定文本文件中唯一性和重复性的最佳方法

如何解决《确定文本文件中唯一性和重复性的最佳方法》经验,为你挑选了1个好方法。

我有一个大约2000万行的文本文件.每行长度为25个字符.我估计大概有大约200k-300k的独特线路.我想知道的是究竟有多少条独特的线条,以及每条线条的出现次数(我希望结果是幂律式的).

我能做到这一点:

sort bigfile|uniq -c |sort -nr > uniqcounts
wc -l uniqcounts

但这是非常低效的记忆和时间.

这个问题的最佳命令行解决方案是什么?



1> Commodore Ja..:

当我遇到像这样的文本处理问题时,我倾向于倾向于Perl,特别是因为Perl安装在大多数Unix系统上.(你可以用awk做同样的事情,这可能会更有用.)

像这样的东西应该做的伎俩:

#!/usr/bin/perl

while(<>) {
    chomp;
    $lines{$_}++;
}

print "Total unique lines: ", scalar(keys %lines), "\n";
foreach my $line (sort {$lines{$b} <=> $lines{$a}} keys %lines) {
    printf "%6d  %s\n", $lines{$line}, $line;
}

(你可以做一个单行,但是分解使它更容易阅读.)

这需要O(n)内存用于散列键,其中n是唯一行的数量.运行时效率取决于散列查找,但介于O(n)(如果没有散列冲突)和O(n*log n)(对于平衡树)之间.在最坏的情况下,最终的可选排序可能需要O(n ^ 2),并且如果唯一行的数量很高,则可能在运行时占主导地位.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有