[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

【出题】批处理去除超大文本中的重复行

去除超大文本中的重复行
在非常批处理论坛看到这个题,觉得挺有挑战的,上百万行的数据,光靠批处理应该是难做到了,不知道借助第三方命令行工具能否完成。

文本内有大概100W行的数据
要求一、 删除所有重复行
要求二、 以----为分隔符,将第一列与第二列重复的行删除(描述有问题,以末尾的红色字更新为准)
两个要求完成一个也行,分两个代码完成也行,最完美的是在一个代码中完成两个要求。

部分样本
12779----alibaba140379----222.222.222.222----哈哈哈哈哈哈----2008-5-20----21:24:20
13166----BXGHgxst115----123.112.68.25----欧洲
12779----alibaba140379----203.93.208.138----山东省青岛市网通----2008-5-20----21:24:20
13166----BXGHgxst115----111.111.111.111
12779----alibaba140379----222.222.222.222----哈哈哈哈哈哈----2008-5-20----21:24:20
255004----dsfdsfdsf----123.112.77.25


扩展要求:保持原文本中不重复的行顺序不变

创建 100万 行左右的测试文件代码。
。。。
  1. @echo off&setlocal enabledelayedexpansion
  2. echo 正在创建测试文件 y1.txt 请稍候。。。 行数为 1000005 行
  3. (for /l %%a in (1 1 100) do echo !random!----!random!----!random!!random!----!random!)>y1.txt
  4. (for /l %%a in (1 1 10) do type y1.txt)>y2.txt
  5. (for /l %%a in (1 1 10) do type y2.txt)>y1.txt
  6. (for /l %%a in (1 1 10) do type y1.txt)>y2.txt
  7. (for /l %%a in (1 1 10) do type y2.txt)>y1.txt
  8. (echo !random!----!random!----!random!!random!----!random!!random!
  9. echo !random!----!random!----!random!!random!----!random!!random!
  10. echo !random!----!random!----!random!!random!----!random!!random!
  11. echo !random!----!random!----!random!!random!----!random!!random!
  12. echo !random!----!random!----!random!!random!----!random!!random!)>>y1.txt
  13. del /q y2.txt
复制代码
问题二描述有问题,现更新
要求二、 以----为分隔符,将第一列与第二列重复的行删除,保留第一行。
比如:
1234---555--44444444444
1234---7777--fafjaf
1234---555--444444
334----7898----dfadifaf
1234---555--00000000000000
这种情况下就保留第1、2、4行
因为第1行、第3行、第5行,的第1列和第2列是重复的。


[ 本帖最后由 随风 于 2009-5-29 17:59 编辑 ]
技术问题请到论坛发帖求助!

回复 2楼 的帖子

就是要看能否突破这个效率问题啊^_^
技术问题请到论坛发帖求助!

TOP

已在顶楼给出创建测试文件代码
技术问题请到论坛发帖求助!

TOP

问题二描述有问题,现更新
技术问题请到论坛发帖求助!

TOP

好恐怖的方法^_^
上百万行,你要创建多少个目录?况且如果文本内容含文件名不允许的字符怎办?
技术问题请到论坛发帖求助!

TOP

re 11 楼
你确定 那个100w行的代码有问题啊 就几个重复的 ?
技术问题请到论坛发帖求助!

TOP

回复 14楼 的帖子

首先 4分钟 并不算快,
况且顶楼的只是临时测试样本,而非正在的需处理原件,为提高创建样本时间而产生的行大多是重复的,其实不重复的应该只有百来行,这使得你第二个for的运行时间大大减少,若不重复行占半数或更多呢?
其次,还是非法文件名问题,若在word中进行替换则使得代码变成了半自动,不够完美。
再次,创建这么多的临时文件,个人认为始终不太可取,如此疯狂的对硬盘进行写入操作不知道对硬盘会否有影响。
技术问题请到论坛发帖求助!

TOP

30s就可以遍历百万行的文本?没测试过,但对这类代码的评论,你没看到他8楼的回复吗?
技术问题请到论坛发帖求助!

TOP

返回列表