[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
处理6W行记录花了2分多钟,100W就不敢试了!大概要一个多小时吧!
源文件为:sour2.txt
处理结果为:temp3.txt
可完成两个要求。
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=" %%a in (sour2.txt) do (
  3.         set/a n+=1
  4.         set num=000000!n!
  5.         echo !num:~-7!-%%a
  6. ))>temp.txt
  7. ::加入序号保持原来的顺序
  8. (for /f "tokens=1,2,3* delims=-" %%a in ('sort temp.txt /+8') do (
  9.         if "%%b-%%c" neq "!var!" (echo %%a-%%b-%%c-%%d)
  10.         set var=%%b-%%c
  11. ))>temp2.txt
  12. ::从第8位开始排序,即只按原来的数据排序,重复的丢弃
  13. (for /f "tokens=1,2,3* delims=-" %%a in ('sort temp2.txt') do (
  14. echo %%b----%%c----%%d
  15. ))>temp3.txt
  16. ::恢复原来的顺序,并丢弃加入的临时序号
复制代码
把楼主的数据存为sour.txt, 通过下面代码生成的sour2.txt具有6W行记录。
  1. @echo off
  2. (for /f "delims=" %%a in (sour.txt) do (
  3. for /l %%b in (1,1,10000) do (echo %%a)
  4. ))>sour2.txt
复制代码

[ 本帖最后由 netbenton 于 2009-5-29 17:51 编辑 ]

TOP

一个cmd最大可以使用内存为64M,除去一些系统和BAT程序本身占用,应该有60M可以给变量使用,所有字符是以字为单元,一变量定义就算只有:一个字变量名,一个等号,一个字符值,一个分隔符,最少要占4个字的空间,也就是说以最小的变量定义计算,只可以定义:60/2/4=7.5M个变量
如果这100W行中只有少数几行是重复的话,就要定义近100W个变量,相当一1M个变量,可是如果定义的变量名平均超过28个字符的话,无疑就会溢出。就此题来说用定义变量判断重复的方法,出错的可能性有一半。
还有一点,当定义的变量数量过大时,系统去搜索变量名也是需要时间的。
我曾经做过这种测试,就是不停的定义变量,看一个cmd到底能定义多少个变量。
最后是定义到该cmd进程序占用40多M内存时就不耐烦了,等待了好长时间,越是到最后就越慢。

TOP

返回列表