我有一个文本文件,我需要删除所有重复的行,例如:
line1
line2
line3
line2
line1
会导致:
line 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)
答案 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);