如何删除所有具有重复项的行

时间:2015-06-29 09:14:40

标签: windows batch-file scripting

我有一个文本文件,我需要删除所有重复的行,例如:

line1
line2
line3
line2
line1

会导致:

line 3

有没有办法可以用批处理来完成这个?

3 个答案:

答案 0 :(得分:1)

“又快又脏”:

@echo off
for /f "delims=" %%a in (file.txt) do (
  for /f "tokens=2 delims=:" %%b in ('find /c "%%a" file.txt^|find ":"') do (
    if "%%b" == " 1" echo %%a
  )
) 

注意:这将为每行读取file.txt,因此在大文件上可能会很慢。

答案 1 :(得分:0)

有一个很好的例子here

它在Linux,Mac和Cygwyn中运行良好。

sort inputfile.txt | uniq -u

答案 2 :(得分:0)

我们可以在Batch中模拟Linux的sort inputfile.txt | uniq -u解决方案,但是如果文件很大,最好的方法是使用JScript语言来编写" uniq"部分,所以运行得更快:

@if (@CodeSection == @Batch) @then

@echo off
sort file.txt | cscript //nologo //E:JScript "%~F0"
goto :EOF

@end

// JScript section, emulate Linux's "uniq -u"

var n = 1, line1 = WScript.Stdin.ReadLine(), line2;
while ( !WScript.Stdin.AtEndOfStream ) {
   while ( (!WScript.Stdin.AtEndOfStream) && (line1 == (line2=WScript.Stdin.ReadLine())) ) ++n;
   if ( n == 1 ) WScript.Stdout.WriteLine(line1);
   n = 1, line1 = line2;
}
if ( n == 1 ) WScript.Stdout.WriteLine(line1);