批处理如何提取文本不重复行并输出?

批处理提取一个文本内容里的不重复行并输出,如何实现?
我有一个文本,里面有好多行,要求提取不重复的行,例如
原文本1:
4344
你1好11
4334
222
你1好
4535
不过
天天4
4334
不过
你1好11
处理后并输出的文本2为:
4344
222
你1好
4535
天天4

第1个回答  2011-06-05
你为什么会想到用批处理呢,绝大多数情况下用批处理通常都是最麻烦的方法,你的问题只需要简单的把数据复制到excel里,选中所有数据后,在数据-筛选-高级筛选下选中选中不重复的记录,确定后就会看到你需要的结果,再复制一次贴到记事本或其它地方就可以了。
第2个回答  2011-06-05
哎- - 写了半天给自己写迷糊了 终于弄好了。

@echo off
setlocal enabledelayedexpansion
set a=0
for /f "delims=" %%i in ('type 原文本1.txt') do (
set a=0
for /f "delims=" %%j in ('type 原文本1.txt') do if "%%i" == "%%j" (set /a a+=1)
if "!a!" leq "1" echo %%i >>文本2.txt
)追问

很感谢您,但有一个小问题需要修正一下,好像处理后的文本行里每行后面都多了一个空格,还有多余了一行,另外这个批处理能不能处理速度快一点,这个太慢

追答

每行后面都有空格的话 把倒数第2句 换成这个就好了
if "!a!" leq "1" echo %%i>>文本2.txt

不知道你说的是多余一行是哪一行`? 最后有个空白的一行`?
那个好象批处理输出的都这样。。 我不太知道怎么弄`~

要是说太慢的话。。 应该会。。 因为是一一比对
你的原文本如果很大的话 比对起来应该是很慢。。
可能是我设计思路不他对。
你可以再等下。 看看有有没有其他人有更好的思路。
我也很期待有人能拿出好思路让我学习下。 因为我实在想不出来了~

@echo off
setlocal enabledelayedexpansion
set a=0
echo 临时文件>temp
for /f "delims=" %%i in ('type 原文本1.txt') do (
set a=0
for /f "skip=2" %%h in ('type temp') do if %%h == %%i (set a=2 && goto :tz)
for /f "delims=" %%j in ('type 原文本1.txt') do if "%%i" == "%%j" (set /a a+=1)
:tz
if "!a!" leq "1" (echo %%i>>文本2.txt) else (echo %%i>>temp)

)
del temp

也许能稍微会减少点时间。

本回答被提问者采纳
第3个回答  2011-06-06
@echo off
(for /f "delims=" %%i in (1.txt) do (
if not defined %%i (echo;%%i) else call,set "#=%%#%%%%i "
set "%%i=0"
))>#
findstr /v /i "%#%" #>2.txt&del #追问

这个批处理速度很快,但提取的不够完整,有个别的行漏掉了,希望修改一下,很感谢

追答

@echo off
(for /f "eol= delims=" %%i in ('"type 1.txt|findstr ".*""') do (
if not defined %%i (echo;%%i) else call,set "#=%%#%%%%i "
set "%%i=0"
))>#
findstr /v /i "%#%" #>2.txt&del #

追问

依然没有变,提取的不够完整,有个别的行漏掉了,希望修改一下,

追答

请说出漏掉的行是什么样的。。

@echo off
(for /f "delims= eol=" %%i in ('"type 1.txt|findstr ".*""') do (
if not defined %%i (echo;%%i) else call,set "#=%%#%%%%i "
set "%%i=0"
))>#
findstr /v /i "%#%" #>2.txt&del #

现在应该可以完整提取了

追问

还是不行,

追答

那你倒是举出一两个漏掉的行啊。。也好让我看看是什么样子的。。要不然我得一个个测试过去。难免会有遗漏。。没有针对性

追问

例如漏掉了
100
101

追答

不可能的。。我测试了可以提取。。我第三次修改的代码只要行首没有退格符,都不会有任何遗漏。。。强烈要求楼主仔细找下文本里的100或101是否重复!!!!!

追问

100和101没有重复行,只一行

追答

受不了了。。你把源文件发到946201279@qq.com或者直接把源文件内容贴出来。。我要测试给你看。。还有,我在bathome也发了这个答案你不相信的话就去问问我的答案提取100和101有没有问题。。那里高手如云你该放心吧。。

第4个回答  2011-06-06
@echo off
for /f "tokens=* delims=" %%a in (1.txt) do md %%a
ping -n 10 127.1>nul
dir /b /ad>2.txt
for /f "tokens=* delims=" %%a in (2.txt) do rd %%a追问

代码不完整吧

追答

你运行一遍就知道了,结果保存在2.txt里

追问

你在开玩笑呢?

追答

开玩笑?无语,我还没这么无聊呢

追问

你试着运行一下看看是啥效果,满桌面都是文件夹,呵呵呵

追答

这段代码是提取文本内容生成空文件夹,然后用dir命令把生成的文件夹列表输出到2.txt,然后自动删除空文件夹,你需要新建一个空文件夹,把代码和原文本复制到新建的文件夹里运行.
你不会连代码都不阅读就莽撞运行吧.

追问

运行后不能准确处理,将每行里的中间空格自动变成了回车换行了

追答

@echo off
for /f "tokens=* delims=" %%a in (1.txt) do md "%%a"
ping -n 10 127.1>nul
dir /b /ad>2.txt
for /f "tokens=* delims=" %%a in (2.txt) do rd "%%a"

追问

不行

追答

如果只是空格原因,我这里测试通过,你把出错的真实文本粘贴上来,我分析一下

批处理如何提取文本不重复行并输出?
每行后面都有空格的话 把倒数第2句 换成这个就好了if "!a!" leq "1" echo %%i>>文本2.txt不知道你说的是多余一行是哪一行`? 最后有个空白的一行`?那个好象批处理输出的都这样。。 我不太知道怎么弄`~要是说太慢的话。。 应该会。。 因为是一一比对 你的原文本如果很大的话 比对起来应该是很慢。。

批处理读取txt ,不重复 随机循环显示
echo off setlocal enabledelayedexpansion set fn=%1 set \/a t=2 for \/f "tokens=1 delims=:" %%i in ('findstr \/n . %fn%') do set m=%%i :begin set n= set \/a r=!random!%%!m!+1 for \/f "tokens=1,* delims=:" %%i in ('findstr \/n . %fn%') do (set \/a n+...

求批处理:提取b文本中与a文本不重复的行
echo off for \/f "tokens=*" %%i in (a.txt) do set #%%=1 (for \/f "tokens=*" %%i in (b.txt) do if not defined #%%i echo %%i)>c.txt notepad c.txt

求一批处理文件,整理一个数百万行文本文件a.txt,去掉小于8字符和大于15...
如果你能下载到CygWin的几个命令行工具程序,这个活儿就很好办,就靠windows系统自带的做起来复杂和低效,用两个就行,分别是grep.exe和sort.exe(比windows的sort.exe好用多了)。若感兴趣,请留邮箱,咱发给你。有了趁手工具后,直接一行搞定,如下:grep -P "^.{8,15}$" a.txt|sort -u>b....

bat批处理 提取TXT某字符串 前 的字符串 代码找不到哪出了问题 。很...
把第二个for命令去掉 \/f 可以解决一行中不定数的多组问题。(当然之前处理好把处理行以空格或半角逗号分隔),并且输出时加上判断,比如要输出的是!str2!,写成if not defined #str2 echo.!str2!>>newfile&set #!str2!=y就可去掉重复行。如果还是不会,把对应样文处理后需要的结果也贴出来...

批处理提取
批处理提取一个文本内容里的不重复行并输出,如何实现?我有一个文本,里面哎- - 写了半天给自己写迷糊了 终于弄好了。 @echo off setlocal enable

请问如何删除文本文件中的重复行?
第一步. 删除A的重复行 1. 按ctrl-o打开文件A 2. 按ctrl-h打开replace对话框,设置如下:在Replace页:Replace Unit=Line Search for Pattern下面填.*(表示任意行)If下面填get_value($match)==1 (注:以上操作表示删除重复行)打开Advance页:Run following at the beginning of text 填 clear_...

批处理 查找文本内容 何去除文本后面所有的内容呢?
1. 打开Tools->Batch Runner菜单。2. 点击Pick Files把要替换的文件都选中。3. 点击Fast Replace,点击Add加入替换规则。在search=>输入"<\\\/html>.*$"(不带双引号)在Replace=>输入"<\\\/html>"(不带双引号)4. 重复第3步,直到所有的规则都加入 5. 点击Start即可 注:1.注意提前备份 2.在第...

批处理写一个处理文本内IP,去掉重复并填充IP段
echo offsetlocal enabledelayedexpansionecho IP:>ip2.txtfor \/f %%i in ('type ip.txt') do (find "%%i" ip2.txt>nulif !errorlevel! EQU 1 echo %%i>>ip2.txt)保存为bat文件,跟ip.txt放在同一路径。其中ip.txt存放你的IP地址,ip2.txt是输出的无重复的ip地址 ...

一个txt文件中,如何用批处理导出固定开头的固定长度非固定位置的字符...
回答:我也建议您先用word处理一步,就是将log.txt中所有的DSS替换成^pDSS; 然后将如下的批处理与log.txt存在同一个文件夹中,双击运行即可: @echo off @setlocal enabledelayedexpansion rem 初始化 @del 2.txt rem 提取内容 @for \/f "delims=" %%i in (log.txt) do ( @set a=%%i @if not...

相似回答