[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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 编辑 ]
技术问题请到论坛发帖求助!

回复 4# Batcher

这个简单,用w32dasm 输出汇编代码,一般每个文件 都在几十M以上,大的百M以上不稀奇。
通常大部分编辑器会卡死,但gvim还是很厉害的

TOP

回复 53# happy886rr


    go 发展得也还很不错,一些新公司也有在用GO的,有GOOGLE在推广。好像编译后只生成一个可执行文件。也是很方便的一优点。
我对GO有也有兴趣。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

回复 52# codegay
go语言也不错,就是不怎么火。py非常简洁,但速度太慢。julia数学功能很全,但是不如纯C快。做计算最好C来完成,C也可以用数组实现大数运算。但是在非数学计算方面,我非常喜欢用py,写的很少很简洁,各种模块很多,就是在搭积木。Bat是无法取代的胶水语言,用来衔接win下的各种程序,就是没找到cmd、find之类的源码,微软不开源吗。

TOP

本帖最后由 codegay 于 2016-5-24 19:41 编辑

回复 51# happy886rr


    ruby互联网新兴创业公司有在用,
python在数据处理之类的领域也有用处,
powershell在windows平台上做运维自动化有优势,
正则库之类的文本处理库,其它语言都支持了,perl已经没有什么的优势了。

能把程序写出来,才能走到考虑性能的那一步。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

回复 49# zhsh1128
赞同楼上观点,尤其是C语言或者汇编速度快的惊人,可以pcre正则库,或者hash值效验,perl善于文本处理,python易于上手。

TOP

回复 49# zhsh1128


    学门高级语言吧。入门门槛会高点,但是熟练以后自由度会高很多,很多东西都能自己做。
python ruby powershell之类的语言都可以。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

这个问题有答案么?我非常非常需要。我的工作中常常需要剔除几十万行数据中重复的行。目前的方法是:在excel中用数组+字典,速度也是超快。我想用批处理来处理文本数据,一直不知道怎么入手。

TOP

是啊,几十M,本想打开一看究竟,随手一双击,进程就无响应了。。。
学习...

TOP

回复 1# 随风

汗~
100W行的txt有35MB啊~
要开都卡死了~

TOP

复制一楼代码的时候因为感觉创建类似的测试文本的可选方案很少,扫一眼没看到有特色的东西,所以就没细看…太懒啊太懒啊

TOP

随机种子只决定了随机数序列的一致性
而随机数的散列情况取决于随机算法

也就是说
同一个种子同一种算法
仍然会生成无穷个随机数
组成一个序列
而这个随机数序列总是一致的

另外
以上讨论的都是“伪随机”
计算机的组成原理决定了
不可能有绝对的随机算法存在
我们只是无限逼近随机
大多数情况下这种随机散列就足够了

当然
顶楼的算法连“伪随机”也算不上了
天的白色影子

TOP

哦,没注意,我还以为和随机数种子有关呢...

TOP

发现一个问题,为什么测试文件y1.txt中重复行这么多,测试了下,每行都有1000行相同...剔除重复行以后只剩下105行,需要定义的变量很少,难怪if defined的办法没怎么受影响,竟然只要二十多秒...无语了
zm900612 发表于 2011-4-27 14:05

那当然
测试代码只随机生成了100行文本
然后就通过四级for循环type复制到了1000000行
最后再加了五行随机文本
这样的样本代表性太弱了
天的白色影子

TOP

本帖最后由 zm900612 于 2011-4-27 14:08 编辑

发现一个问题,为什么测试文件y1.txt中重复行这么多,测试了下,每行都有1000行相同...剔除重复行以后只剩下105行,需要定义的变量很少,难怪if defined的办法没怎么受影响,竟然只要二十多秒...无语了

TOP

返回列表