今天分析数据的时候刚好碰到一个小问题,因为本身文件较大一开始想不出比较好的解决方法,睡个午觉醒来突然有了灵感,自认为目前解决的还算巧妙。
问题
一个 3 列 3,741,430 行的文本(行数比较多),第一列是字符,第二列是字符,第三列是数值,tab 分割。数据格式如下:
A23 B66 1234
C56 D34 2334
B66 A23 1234
D34 C56 2334
E78 F88 1234
这个文本虽然是3,741,430 行,但是其有效信息只有一半。因为A23 B66 1234
和 B66 A23 1234
只是第二列和第一列互换了下位置。
需求
如何尽可能快的处理这个 3 列 3,741,430 行的文本,当某一行的第一列和另一行的第二列相同同时它的第二列又和那一行的第一列相同时,就只保留这两行中的一行即可(具体留哪行没有要求)。简单说就是如下的4行只保留2行:
A23 B66 1234
C56 D34 2334
B66 A23 1234 # 同第一行
D34 C56 2334 # 同第二行
要修改为
A23 B66 1234
D34 C56 2334
讨论
不知道各位读到文章朋友有什么妙招,可以快准狠的解决这个大文本的另类去重问题。不限制使用语言可以是shell,可以是R,python ,也可以是 C 甚至是 PHP,不限制代码行数,可以多CPU。
如果做不到云测试写代码,可以下载这个好多好多行的文件进行测试,文件有170MB,云盘下载链接 https://share.weiyun.com/5iFEju3
对了,我目前的运行时间是:real 0m29.131s;user 0m30.316s;sys 0m0.824s
转载于:https://www.jianshu.com/p/d492eede82fd