如何删除所有有重复的行

How to Delete All Lines That Have Duplicates

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

line1
line2
line3
line2
line1

会导致:

line 3

有什么方法可以批量完成吗?

有个很好的例子here

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

sort inputfile.txt | uniq -u

"Quick and dirty":

@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,因此在大文件上可能会很慢。

我们可以在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);