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


  Quote:
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


  Quote:
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


  Quote:
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


  Quote:
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