文本处理的小诀窍

作者: Dorm_Script | 来源:发表于2016-08-29 16:25 被阅读214次

场景描述

原始文本格式:

pid1 kid1
pid3 kid1
pid1 kid2
pid1 kid3
pid2 kid3
pid2 kid4

需要统计的结果:每条pid可以跟哪几个kid关联,最终结果格式:

pid1 kid1,kid2,kid3
pid2 kid3,kid4
pid3 kid1

** 原始文本大概有2亿多行 **

处理思路

  • 将文本按第一列排序,排序后效果:
    pid1 kid1
    pid1 kid2
    pid1 kid3
    pid2 kid3
    pid2 kid4
    pid3 kid3
  • 将第一列相同的行合并,效果:
    pid1 kid1,kid2,kid3
    pid2 kid3,kid4
    pid3 kid1

具体解决代码

    # sort -k 1 -n src.txt > sort1.txt
    # cat sort1.txt | php -B '
          $pidtmp = 0;
          $kidtmp = array();
      ' -R '
          list($pid, $kid) = explode("\t", $argn);
          if($pid != $pidtmp) {
              echo "\n".$pidtmp."\t".implode(",", array_keys($kidtmp));
              $pidtmp = $pid;
              $kidtmp = array();
          }
          $kidtmp[$kid] = 1;
      '

** 以上两条命令可实现需求,共耗时半个小时左右 **

其它说明

本需求中存在一个原始文档,这个文档是通过其它程序生成的。那么存在一个疑问,为什么其它程序生成文档时,不直接生成所需要的格式(即以上示例的最终格式),而是生成一个中间格式的文档。

其实在设计之前的程序时,确实就是期望直接输出以上的最终文档,但出现一个问题就是这个最终文档要怎么存储,存mysql还是nosql。尝试过mysql,一共有2亿行结果,每一行就需要读、写一次mysql,时间成本太高。然后也尝试了redis,使用列表存储,每一行原数据,只需要写一次redis的列表,可以减少一次读,然而时间还是太长,所以才将中间结果输入到文本。再使用以上提到的2条命令将结果转换为最终格式,时间成本大降低。

如果有另外一个程序需要根据pid来搜索以上生成的最终文档,可以借鉴另一篇文章 ,入口

相关文章

  • 文本处理的小诀窍

    场景描述 原始文本格式: 需要统计的结果:每条pid可以跟哪几个kid关联,最终结果格式: ** 原始文本大概有2...

  • 小诀窍

    找好处,看优势 属于消气提神法、关系和好融洽法。。。 同时也属于消灾免难法。。 用人长处, 属于增益法 好好讲...

  • 幸福的小诀窍

    幸福是什么? 每个人对幸福的定义是不一样的,有的人觉得获得财富自由是幸福,有的人觉得获得时间自由是幸福,有的人觉得...

  • 吃鱼的小诀窍

    1、鱼肉、鱼脑 鱼肉中含有丰富的优质蛋白,易消化吸收;脂肪含量低,供热能低;还含有钙、磷、钾、碘、锌、硒等无机盐,...

  • 读书小诀窍

    我印象中自己要读完一本300来页的书,我大概需要3个月的时间…… 在一个神奇的夜晚,我认识到一本书《如何阅读一本书...

  • 护发小诀窍

    我一直认为你认真对待的事物也一定会反过来认真对待你。 拿头发这事来说,从头开始,认真对待: 1.洗头只是打开头鳞片...

  • 灭菌小诀窍

    有的植物具有特殊的香气或气味,对人无 害,而蚊子、蟑螂、苍蝇等 闻到就会 避而远之。这些特殊的香气或气味,有的 还...

  • 偷懒小诀窍

    在这里分享一下我在工作中找到的两个可以偷懒的方法。 第一个方法:本人平时写报告会用到一些介绍材料,材料为纸质件的,...

  • 《说服小诀窍》

    多学一些,多了解一些,总归是对自己有帮助的,先学以及强化立马可以拿来用的。 01 大胆表达 高中的时候总感觉那个女...

  • 煎药小诀窍

    最近调理身体,偶得煎药小技巧! 大火煮开,小火慢炖半小时。 煮开之际,锅周边泛起小泡,不断的往浮面翻涌。开启油烟机...

网友评论

    本文标题:文本处理的小诀窍

    本文链接:https://www.haomeiwen.com/subject/vpoxettx.html