批处理实现过滤重复行
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