有效排序| uniq用于大量重复的情况

Ali*_*fee 3 unix linux

总结:有没有办法从文件中获取唯一的行数和出现次数比使用sort | uniq -c | sort -n

详细信息:我经常sort | uniq -c | sort -n在进行日志分析时获取一般趋势,了解哪些日志条目显示最多/最少等.这大部分时间都有效 - 除非我处理的是一个非常大的日志文件大量重复(在这种情况下sort | uniq -c最终需要很长时间).

示例:我现在面临的具体情况是从"未参数化"的mysql bin日志中获取趋势,以找出哪些查询运行最多.对于一个百万条目的文件,我通过grep/sed组合来删除参数 - 产生大约150个独特的行 - 我花了大约3秒的grepping和sedding,以及大约15s的排序/ uniq'ing.

目前,我已经找到了一个简单的c ++程序来维护一个<line,count>的映射 - 它可以在不到一秒的时间内完成工作 - 但我想知道现有的实用程序是否已经存在.

Kev*_*vin 5

我不确定性能差异是什么,但你可以sort | uniq -c用一个简单的awk脚本替换它.既然你有很多重复项并且它有哈希而不是排序,我想它会更快:

 awk '{c[$0]++}END{for(l in c){print c[l], l}}' input.txt | sort -n
Run Code Online (Sandbox Code Playgroud)