Stay Hungry.Stay Foolish.
分享两个处理文本文件的Linux小工具

小科普:Hashtable 的加载因子确定元素与Hashtable 可拥有的元素数的最大比率。加载因子越小,平均查找速度越快,但消耗的内存也增加。默认的加载因子 0.72通常提供速度和大小之间的最佳平衡。当创建 Hashtable 时,也可以指定其他加载因子。 元素总量/ Hashtable 可拥有的元素数=加载因子

reg

reg用来剔除一些被混入的无用的字节的行。

  • Ascii文本混入不可打印字符
  • utf-8文本混入非中文字符,和Ascii的不可打印字符

fbUniq

  • 借鉴awk的去重思想
  • 时间复杂度O(n),远优于sort | uniq -c 做法。

fbUniq 用来应对大文本的去重, 经过测试,当文本文件比较大时(几百w行,几千w行),速度上比使用awk ‘!a[$0]++’快1倍,内存占用上节约一倍。目前固定了hashtable的大小为33554432(1<<25),当处理的数据远远大于33554432的时候,建议增大hashtable的尺寸,可以防止hash碰撞导致使用List之后,遍历List增加的性能开销,单相应的内存使用就会上升,目前默认的大小速度和内存上平衡还可以。

Happy Hacking, 代码

自由转载-非商用-非衍生-保持署名(创意共享3.0许可证
评论
2017-01-21 04:56:30

我怎么看着fbUniq的时间复杂度是O(n)呀?