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

[文本处理] [已解决]求助批处理相同行删除,不同行只保留一个

本帖最后由 jrx401 于 2019-10-22 11:30 编辑

详细如下;
a.txt内容;
11111
11111
11112
A1111
11111
CCCCC
11111

a.txt处理后;
11111
11112
A1111
CCCCC

如下code是可以处理,但是A.txt里面有几千行时,就非常耗时。
可否有快速处理的方法呢?

使用的code;
  1. setlocal enabledelayedexpansion
  2. set n=0
  3.   for /f %%a in (A.txt) do (
  4.     set /a n=!n!+1
  5.     set m=0
  6.     set write=1
  7.     for /f %%b in (A.txt) do (
  8.       set /a m=!m!+1
  9.       if !m! lss !n! (
  10.         if %%a == %%b ( set write=0 )
  11.     )
  12.   )
  13.   if !write! equ 1 echo %%a >> result.txt
  14. )
复制代码
感谢各位大虾
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  1. powershell "(gc 'a.txt' | sort -Unique) | Out-File a.txt"
复制代码

TOP

  1. gawk "!a[$0]++" "a.txt" > "b.txt"
复制代码
推荐试试第三方命令行工具 gawk 处理速度比较快
http://bcn.bathome.net/s/tool/index.html?key=gawk
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# ivor


    感谢大侠回复。
     使用Powershell 就无法把bat 转成exe档。
     可否有好的方法转档成exe呢?

     衷心感谢

TOP

回复 3# Batcher


    感谢大侠回复。
    不是很会用,使用gewk后的bat 可否也可以转成 exe呢?

    衷心感谢

TOP

感谢两位回复。
一直想办法使用bat来写看看,
发现改成如下,就变得比较快了
   for /f "tokens=1,2 delims= " %%c in (A.txt) do (   
    findstr /c:"%%c" B.txt>nul||echo %%c>>B.txt
   )
pause

TOP

回复 6# jrx401


这样应该可以再快点
  1. (for /f "tokens=1,2 delims= " %%c in (A.txt) do (
  2.     findstr /c:"%%c" B.txt>nul||echo %%c
  3. ))>B.txt
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

文件不是很大的话 这样提高点效率
  1. @echo off&SetLocal EnableDelayedExpansion
  2. (for /f "delims=" %%a in (a.txt) do (
  3.     if "!%%a!"=="" (
  4.         echo %%a
  5.         set %%a=0
  6.     )
  7. ))>b.txt
  8. pause
复制代码

TOP

回复 7# Batcher


    感谢大虾。
    比我的快 5s 。
    四千行的数据
    万分感激

TOP

回复 8# terse


      高手!!!
     秒杀[四千行,1s 结束]
     不是很理解,为什么可以这样快。
      万分感激

TOP

本帖最后由 wxyz0001 于 2019-10-25 18:20 编辑

回复 1# jrx401
答案很浅显易懂
不过程序似乎多用了些废功夫,第二个for中,当 if %%a == %%b ( set write=0 )这个条件满足时,好像没有设置跳出循环,你们说是不是多走了些无用功

TOP

回复 8# terse

代码短,也很精辟,赞

TOP

4000行 1S ?那 22000000多行 4s内完成 又如何?
QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

返回列表