[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理怎样排除重复并列出重复的行及个数?

本帖最后由 gcbgczhang 于 2021-7-31 14:21 编辑

请教各位老师,我想对一个文本文件里的各行字符串排除重复并列出重复行内容及个数
文件list.txt内容:
111111
哈哈
333333
65767
哈哈
林林
111111
哈哈
...
排重后输入到文件tmp1.txt内容:
111111
哈哈
333333
65767
林林
重复的输到文件tmp2.txt内容:
11出现3次
哈哈出现2次

  1. @echo off
  2. set info=互助互利,支付宝扫码头像,感谢赞助
  3. rem 有问题,可加QQ956535081及时沟通
  4. title %info%
  5. cd /d "%~dp0"
  6. set "input=list.txt"
  7. set "output1=tmp1.txt"
  8. set "output2=tmp2.txt"
  9. powershell -NoProfile -ExecutionPolicy bypass ^
  10.     $dic=New-Object 'System.Collections.Generic.Dictionary[string,int]';^
  11.     $text=[IO.File]::ReadAllLines('%input%',[Text.Encoding]::Default);^
  12.     for($i=0;$i -lt $text.length;$i++){^
  13.         if(-not $dic.ContainsKey($text[$i])){^
  14.             $dic.Add($text[$i],1);^
  15.         }else{^
  16.             $dic[$text[$i]]++;^
  17.         };^
  18.     };^
  19.     $fs1=New-Object System.IO.FileStream('%output1%', [System.IO.FileMode]::Create);^
  20.     $sw1=New-Object System.IO.StreamWriter($fs1, [Text.Encoding]::Default);^
  21.     $fs2=New-Object System.IO.FileStream('%output2%', [System.IO.FileMode]::Create);^
  22.     $sw2=New-Object System.IO.StreamWriter($fs2, [Text.Encoding]::Default);^
  23.     foreach($item in $dic.Keys){^
  24.         $sw1.WriteLine($item);^
  25.         if($dic[$item] -gt 1){$sw2.WriteLine('['+$dic[$item]+']'+$item)};^
  26.     };^
  27.     $sw1.Close();$fs1.Close();^
  28.     $sw2.Close();$fs2.Close();
  29. echo;%info%
  30. pause
复制代码
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

awk差不多一行可以完事。
  1. awk '{a[$0]+=1}END{for (i in a){print i >> "tmp1.txt";if (a[i]>1){printf("%s 出现%d次\n",i,a[i]) >> "tmp2.txt"}}}' list.txt
复制代码

TOP

支持使用 gawk
http://bcn.bathome.net/s/tool/index.html?key=gawk
  1. @echo off
  2. gawk "!a[$0]++" "list.txt" > "tmp1.txt"
  3. gawk "{a[$0]++}END{for(i in a)if(a[i]>1)printf(\"%%s 出现%%d次\n\",i,a[i])}" "list.txt" > "tmp2.txt"
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 4# Batcher


  关键我是个菜鸟,很多年没写命令行了,gawk这是一个命令吗

TOP

我自己写的是这样,大脑有限只能记得这些了,目前暂时能用,但执行的不快。这个是拖入后直接排重计数
@echo off

set var=:
set /p var=拖入文件(请与本工具在同一文件夹)
echo %var%>tmp.txt
for /f "delims=*" %%i in (tmp.txt) do set "var=%%~nxi"
echo 0>tmp.txt>nul
for /f "delims=*" %%i in (%var%) do (
findstr "%%i" "tmp.txt">nul||echo %%i>>tmp.txt
)
del "排重%var%" >nul 2>nul
ren tmp.txt 排重%var%


::::下面是列出重复行及个数
@echo off
del "统计重复%var%" >nul 2>nul
for /f %%i in (排重%var%) do (
        for /f %%j in ('type %var% ^| find "%%i" /c') do (
                if %%j GTR 1 echo %%i有%%j次 >>统计重复%var%

))
pause

TOP

回复 5# gcbgczhang


    gawk是一个命令行工具,你打开4楼的连接把它下载下来和bat脚本放在一起就行了。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 7# Batcher


    好的,我下载了,一会看看是什么功能

TOP

返回列表