Board logo

标题: 请问如何用批处理删掉所有重复行! [打印本页]

作者: yohaa     时间: 2007-4-21 02:26    标题: 请问如何用批处理删掉所有重复行!

请问有没有人知道怎样删掉文本文件中的所有的重复行,只留下非重行,例如: 一个文本文件中含有下面几行: a a b c d 现在我相删掉重复的a, 只留下没有重复的b c d, 用批处理能做到么? 谢谢大家啦!

作者: everest79     时间: 2007-4-21 02:32
cd.>dst.txt&&for /f "delims=" %i in (src.txt) do findstr /b /e "%i" dst.txt||echo %i>>dst.txt

作者: flyinspace     时间: 2007-4-21 03:55
cd.>dst.txt 这句话有什么用呢???

作者: everest79     时间: 2007-4-21 04:09
我是怕find过程中,第一次会不能正常执行

作者: flyinspace     时间: 2007-4-21 04:20
嗯,那我明白了。。

作者: everest79     时间: 2007-4-21 04:28
其实也没达到楼主要求,我这会才看明白楼主要求什么

作者: flyinspace     时间: 2007-4-21 04:31
呵呵,这个用两个for循环是最好的处理方式了。

作者: everest79     时间: 2007-4-21 04:35
楼主要将重复的行全删掉,一个也不保留

作者: yohaa     时间: 2007-4-21 04:38
请问兄台,怎么个用法呢,为了这个问题,我这两天头都搞大啦,

作者: yohaa     时间: 2007-4-21 04:40
『第 9 楼』: 请问7楼兄台,怎么个用法呢,为了这个问题,我这两天头都搞大啦, 另外谢谢everest79 的热情帮忙!

作者: everest79     时间: 2007-4-21 04:41
我的这个只能将重复的行删掉 a a b c d a b c d 并不能 a a b c d b c d src.txt是你原来的文本,执行完后dst.txt是过滤后的文本,将cmd切换到保存src.txt的目录下,再执行上边一行

作者: NaturalJ0     时间: 2007-4-21 04:42
namejm 版主以前写过一个完全符合楼主要求的代码,搜下吧。

作者: yohaa     时间: 2007-4-21 04:51
另外运行了二楼兄弟的命令,也像一个重复的也删不了,运行完了还是 a a b c d

作者: everest79     时间: 2007-4-21 04:59
仔细想想,我试了,没问题,你看那做错没有

作者: flyinspace     时间: 2007-4-21 06:28
那定义一个.ini文件就可以达到要求了。。 .ini 里是删除的东西。。 然后依然是两个for循环。

作者: huzixuan     时间: 2007-4-21 07:37
for /f "delims=" %%i in (test.txt) do if not defined %%i set %%i=a&echo %%i

作者: everest79     时间: 2007-4-21 10:05
ls的也很好呀

作者: waynebeat     时间: 2007-4-21 10:52
uniq text.txt

作者: scriptor     时间: 2007-9-26 14:20
Originally posted by everest79 at 2007-4-21 04:41: 我的这个只能将重复的行删掉 a a b c d a b c d 并不能 a a b c d b c d src.txt是你原来的文本,执行完后dst.txt是过滤后的文本,将cmd切换到保存src.txt的目录下,再执行上边一行
哈哈....终于找到le 我就要的是这个啊 赞一个....

作者: chishingchan     时间: 2007-9-26 22:22
16楼的代码不行 D:\DOCUME~1\ADMINI~1>for /f "delims=" %i in (test.txt) do if not defined %i set %i=a&echo %i D:\DOCUME~1\ADMINI~1>if not defined aa set aa=a & echo aa D:\DOCUME~1\ADMINI~1>if not defined bb set bb=a & echo bb D:\DOCUME~1\ADMINI~1>if not defined cc set cc=a & echo cc D:\DOCUME~1\ADMINI~1>if not defined dd set dd=a & echo dd D:\DOCUME~1\ADMINI~1>if not defined bb set bb=a & echo bb D:\DOCUME~1\ADMINI~1>if not defined cc set cc=a & echo cc D:\DOCUME~1\ADMINI~1>if not defined ee set ee=a & echo ee D:\DOCUME~1\ADMINI~1>

作者: yoyodos     时间: 2007-9-26 23:26
:)
@echo off
setlocal enabledelayedexpansion
cd.>temp.txt
for /f "tokens=* delims=:" %%i in ('findstr /n ".*" test.txt') do (
    echo %%i>>temp.txt
)

for /f "tokens=1* delims=:" %%m in (temp.txt) do (
    for /f "tokens=1* delims=:" %%x in ('findstr /v /c:"%%m:" temp.txt') do (
        if "%%n"=="%%y" (
            set str=%%y !str!
        )
    )
)

findstr /v "!str!" test.txt
pause
[ Last edited by yoyodos on 2007-9-26 at 11:28 PM ]

作者: terse     时间: 2007-9-26 23:52
Originally posted by chishingchan at 2007-9-26 22:22: 16楼的代码不行 D:\DOCUME~1\ADMINI~1>for /f "delims=" %i in (test.txt) do if not defined %i set %i=a&echo %i D:\DOCUME~1\ADMINI~1>if not defined aa set aa=a & ech ...
16楼的应该可以! @echo off for /f "delims=" %%i in (test.txt) do if not defined %%i set %%i=a&echo %%i>>test2.txt pause

作者: bray     时间: 2008-8-28 17:42
Originally posted by huzixuan at 2007-4-21 07:37 AM: for /f "delims=" %%i in (test.txt) do if not defined %%i set %%i=a&echo %%i
set %%i=a 有什么用处?

作者: bray     时间: 2008-8-28 18:05
Originally posted by bray at 2008-8-28 05:42 PM: set %%i=a 有什么用处?
还有 如果只是想删除相邻重复行的内容怎么办 比如 aaa aaa bbb aaa aaa aaa ccc ddd ccc 要求处理后为: aaa bbb aaa ccc ddd ccc