批处理实现过滤重复行
a.txt内容如下:
123
456
789
123
123
789
获取重复的行,并且重复的行只保留一次,处理后得到b.txt内容如下:
123
789
方法1:
@echooff REM缺点1:无法处理特别大的文件 REM缺点2:需要使用文件中没有出现的字符来标记变量(本例中使用的是下划线) setlocal for/f"delims="%%iin(a.txt)do( set/a_%%i+=1 ) (for/f"tokens=1-2delims=_="%%iin('set_')do( if%%jgtr1( echo,%%i ) ))>b.txt endlocal
方法2:
@echooff setlocalenabledelayedexpansion set"PriLine=" set"DupNum=1" (for/f"delims="%%iin('sorta.txt')do( if"!PriLine!"equ"%%i"( set/aDupNum+=1 )else( if!DupNum!gtr1( echo,!PriLine! ) setDupNum=1 ) set"PriLine=%%i" ))>b.txt if!DupNum!gtr1( >>b.txtecho,!PriLine! )
方法3:
gawk"{a[$0]++}END{for(iina)if(a[i]>1)printi}"a.txt>b.txt
方法4:(更加简洁)
gawk"a[$0]++"a.txt>b.txt
方法5:
@echooff for/f"tokens=*"%%iin(a.txt)doset#%%i=%%i (for/f"tokens=2delims=="%%iin('set#')doecho%%i)>b.txt