【发布时间】:2013-08-13 00:34:40
【问题描述】:
我有一个大文件(40 亿行),每行包含一个单词。我想找到唯一单词的列表和相应的计数。
我试过了:
sort largefile |uniq -c >outfile
但它仍在运行并且没有输出。
然后我尝试了:
awk '!arr[$1]++' largefile >outfile
但它不打印计数。我怎样才能使用 awk 来打印计数?或任何其他可以处理大文件的替代方法。
编辑:文件中有大约 1700 万个唯一词。
【问题讨论】:
-
猫大文件 | awk '{printf("%s %d\n",$1,arr[$1]++)}' |排序-n
-
这被称为“有错误的数据”,或者可能是“滥用了一个荒谬的数据结构”。如果您有 40 亿个数据,那么如果您尝试优化速度,那么平面文件可能是错误的选择。
-
如果你告诉
sort使用尽可能多的内存,它会运行得更快、更快。例如sort -S 8G ...,如果您在 64 位系统上运行,内存超过 8G(并且您的排序是 64 位可执行文件) -
有时您可以使用
sort -u来处理较大的文件
标签: linux bash shell sorting awk