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