找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28618|回复: 11

[文本处理] [已解决]批处理如何快速过滤重复行?

[复制链接]
发表于 2012-8-20 13:05:13 | 显示全部楼层 |阅读模式
  1. for /f "delims=" %%i in (a.txt) do (
  2.     if not defined %%i set %%i=A & echo %%i>>aa.txt)
复制代码
这个a.txt有100多万行,持续过滤几个小时了,还在继续
超、超、超……慢啊!

怎么快速过滤重复行,有没有更快的代码?

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2012-8-20 13:42:15 | 显示全部楼层

  1. (for /f "delims=" %%i in (a.txt) do (
  2.     if not defined %%i set %%i=A
  3.     echo %%i
  4. ))>>aa.txt
复制代码
这样可能会快一点,100多万行也确实太大了。
干什么呢把文件搞这么大?

评分

参与人数 1技术 +1 收起 理由
狗屁不通 + 1 感谢分享

查看全部评分

 楼主| 发表于 2012-8-20 13:58:15 | 显示全部楼层
。。。第三方也行,但要有精度和速度。。。
发表于 2012-8-20 14:25:30 | 显示全部楼层
  1. (for /f "delims=" %%i in (a.txt) do (
  2.     if not defined %%i set %%i=A
  3.     echo.%%i
  4. ))>>aa.txt
复制代码


还能快一点点..
发表于 2012-8-20 15:15:37 | 显示全部楼层
  1. Const adOpenStatic = 3
  2. Const adLockOptimistic = 3
  3. Const adCmdText = &H0001
  4. Set objConnection = CreateObject("ADODB.Connection")
  5. Set objRecordSet = CreateObject("ADODB.Recordset")

  6. strPathToTextFile = "C:"
  7. strFile = "test.txt"

  8. objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
  9.     "Data Source=" & strPathtoTextFile & ";" & _
  10.     "Extended Properties=""text;HDR=NO;FMT=Delimited"""

  11. objRecordSet.Open "Select DISTINCT * FROM " & strFile, _
  12. objConnection, adOpenStatic, adLockOptimistic, adCmdText

  13. Do Until objRecordSet.EOF
  14.     WScript.Echo objRecordSet.Fields.Item(0).Value
  15.     objRecordSet.MoveNext
  16. Loop
  17. objRecordSet.Close
复制代码
网上找的代码,VBS的,通过 ADODB 应该会和谐点吧、、
发表于 2012-8-20 15:21:42 | 显示全部楼层
楼主试试这个? findstr的查询速度应该是最快的
  1. @ECHO OFF
  2. Setlocal enableDelayedExpansion
  3. for /f "tokens=*" %%i in (a.txt) do (
  4.         for /f "tokens=*" %%j in ('findstr "%%i" a.txt')
  5.                 set /a a+=1
  6.                 if !a! geq 2 echo %%i>>aa.txt
  7. )
复制代码
 楼主| 发表于 2012-8-20 18:45:06 | 显示全部楼层
谢谢各位热情的帮助,我去研究研究VBS了。。。
批处理除了速度慢,其他都非常的好。。。
发表于 2012-8-20 18:58:56 | 显示全部楼层
本帖最后由 CrLf 于 2012-8-20 19:37 编辑
  1. @echo off
  2. sort test.txt /o tmp.txt
  3. for /f "delims=" %%a in (tmp.txt) do (
  4.    set "str=%%a"
  5.    setlocal enabledelayedexpansion
  6.    if not !str!==!last! echo %%a
  7.    endlocal
  8.    set "last=%%a"
  9. )
复制代码
gawk:
  1. gawk "{a[$0]++}END{for(i in a)print i}" c:\test.txt
复制代码
修改自:http://bbs.bathome.net/redirect. ... 5&fromuid=30406
如果要按出现的顺序输出则是:
  1. gawk "{a[$0]++;if(a[$0]==1)print $0}" c:\test.txt
复制代码

评分

参与人数 2技术 +2 收起 理由
狗屁不通 + 1 非常感谢^_^
Batcher + 1 乐于助人

查看全部评分

发表于 2012-8-21 10:53:46 | 显示全部楼层
回复 7# 狗屁不通


    试试8楼的gawk吧,可能比VBS快。
发表于 2012-8-21 10:54:35 | 显示全部楼层
回复 2# 冷玉公子


    在实际工作中,几千万行的都经常遇到。
 楼主| 发表于 2012-8-21 11:34:59 | 显示全部楼层
本帖最后由 狗屁不通 于 2012-8-21 12:29 编辑

回复 8# CrLf


    非常感谢^_^    gawk只用了不到5秒! 飞快啊!哈哈
发表于 2012-8-27 10:13:43 | 显示全部楼层
怎样用点阵列数字样本显示当前的系统时间,请教高手解答,用批处理实现。以下是点阵列数字样本的批处理文本。


——————————————————————————————————————————————————————————————————————————————————————————



@echo off
cls
echo.
rem  根据黄金分割比,此程序的每个数字的宽乘以高为10×16个点阵列。
color 0E
echo.
echo.
echo.
echo.
echo.               ██████████
echo.               ██████████
echo.               ██████████
echo.               ██████████
echo.               ██████████
echo.               ██████████
echo.               ██████████
echo.               ██████████
echo.               ██████████
echo.               ██████████
echo.               ██████████
echo.               ██████████
echo.               ██████████
echo.               ██████████
echo.               ██████████
echo.               ██████████
echo.
echo.
echo.
echo.
echo.               ██████████
echo.               ██████████
echo.               ██            ██
echo.               ██            ██
echo.               ██            ██
echo.               ██            ██
echo.               ██            ██
echo.               ██████████
echo.               ██████████
echo.                               ██
echo.                               ██
echo.                               ██
echo.                               ██
echo.                               ██
echo.               ██████████
echo.               ██████████
echo.
echo.
echo.
echo.
echo.               ████
echo.               ████
echo.               ████
echo.               ████
echo.
echo.
echo.
echo.               ████
echo.               ████
echo.               ████
echo.               ████
echo.
echo.
echo.
echo.
echo.               ██████████
echo.               ██████████
echo.               ██            ██
echo.               ██            ██
echo.               ██            ██
echo.               ██            ██
echo.               ██            ██
echo.               ██████████
echo.               ██████████
echo.               ██            ██
echo.               ██            ██
echo.               ██            ██
echo.               ██            ██
echo.               ██            ██
echo.               ██████████
echo.               ██████████
echo.
echo.
echo.
echo.
echo.               ██████████
echo.               ██████████
echo.                               ██
echo.                               ██
echo.                               ██
echo.                               ██
echo.                               ██
echo.                               ██
echo.                               ██
echo.                               ██
echo.                               ██
echo.                               ██
echo.                               ██
echo.                               ██
echo.                               ██
echo.                               ██
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.               ██████████
echo.               ██████████
echo.               ██
echo.               ██
echo.               ██
echo.               ██
echo.               ██
echo.               ██████████
echo.               ██████████
echo.               ██            ██
echo.               ██            ██
echo.               ██            ██
echo.               ██            ██
echo.               ██            ██
echo.               ██████████
echo.               ██████████
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.               ██████████
echo.               ██████████
echo.               ██
echo.               ██
echo.               ██
echo.               ██
echo.               ██
echo.               ██████████
echo.               ██████████
echo.                               ██
echo.                               ██
echo.                               ██
echo.                               ██
echo.                               ██
echo.               ██████████
echo.               ██████████
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.               ██    ██
echo.               ██    ██
echo.               ██    ██
echo.               ██    ██
echo.               ██    ██
echo.               ██    ██
echo.               ██    ██
echo.               ██████████
echo.               ██████████
echo.                       ██
echo.                       ██
echo.                       ██
echo.                       ██
echo.                       ██
echo.                       ██
echo.                       ██
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.               ██████████
echo.               ██████████
echo.                               ██
echo.                               ██
echo.                               ██
echo.                               ██
echo.                               ██
echo.               ██████████
echo.               ██████████
echo.                               ██
echo.                               ██
echo.                               ██
echo.                               ██
echo.                               ██
echo.               ██████████
echo.               ██████████
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.               ██████████
echo.               ██████████
echo.                               ██
echo.                               ██
echo.                               ██
echo.                               ██
echo.                               ██
echo.               ██████████
echo.               ██████████
echo.               ██
echo.               ██
echo.               ██
echo.               ██
echo.               ██
echo.               ██████████
echo.               ██████████
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.                       ██
echo.                     ███
echo.                       ██
echo.                       ██
echo.                       ██
echo.                       ██
echo.                       ██
echo.                       ██
echo.                       ██
echo.                       ██
echo.                       ██
echo.                       ██
echo.                       ██
echo.                       ██
echo.                     ████
echo.                     ████
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.
echo.               ██████████
echo.               ██████████
echo.               ██            ██
echo.               ██            ██
echo.               ██            ██
echo.               ██            ██
echo.               ██            ██
echo.               ██            ██
echo.               ██            ██
echo.               ██            ██
echo.               ██            ██
echo.               ██            ██
echo.               ██            ██
echo.               ██            ██
echo.               ██████████
echo.               ██████████
echo.
echo.
echo.
echo.
pause
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 14:23 , Processed in 0.023015 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表