标题: [文本处理] [已解决]求助坛友:批处理删除文本重复行,区分字符大小写 [打印本页]
作者: 881966 时间: 2023-1-22 13:52 标题: [已解决]求助坛友:批处理删除文本重复行,区分字符大小写
本帖最后由 881966 于 2023-2-18 17:00 编辑
pfxk&*^wcp
eee?==?fff
eeee#########
h20132052@%
fdsg@$
i-ab.co
⑨
ga||game
-u0!JI.h9
""_St.w
//SeM***BW\
g272"|":|":l@785&^&&FG
c")
TheCollector"28hxmf62
7EJbfkctl40UTcbEsD5fyfPSZllW1kAsx7Qp5aN9pnsj2hbSRA4HR1NUVjSd8aYZqUfSkmeVZmR1P4SH07TsRj3LMkgrlC6dphIa4uCeRK8LGNNAwK0SIPVYK2FluEPbUV63GIc3sHS5f93oLumxgn2BRAFZJjz0QH5YbXmSNullvCDosW1aO64GBjyd4iMowzyPfsT3UAVzpo10ruNnWSno9zxoEhQHbBs7FLDIrvRhmbCY7sSaB8VYhyWxCfnuMdHI8r0eXC08BpbKXhRvyFBqk99PXjhKcdVPluCHo9FulP9SLlc9lO1nvzMBkq5oHoiPt5bPESlsT0JlICVzcI964Y2W0F8wP2lsj2vdZj5IA4dpUyJ4JkQEZ
[閾炬帴鐧诲綍鍚庡彲瑙乚
@銆佹彁鐞村瘎
ACG娓告垙寮
垙寮
acg鍜岃皭鍖?
鐪熻悵鑾夛紝鍌插▏鏁戜笘鐣?
e_e鈥樻鐏?
E涔﹀洯
垙寮
作者: 881966 时间: 2023-1-22 14:30
http://www.bathome.net/thread-28482-1-1.html
代码- @echo off
- (for /f "delims=" %%i in (a.txt) do (
- if not defined %%i (
- echo,%%i
- set %%i=1
- )
- ))>b.txt
复制代码
一样不能区分大小写字符
作者: 77七 时间: 2023-1-22 15:05
- @echo off
- cd.>b.txt
- for /f "delims=" %%i in (a.txt) do (
- findstr /x "%%i" "b.txt">nul||echo %%i>>b.txt
- )
- pause
复制代码
1楼的代码 加个 /x 完全匹配,试试呢
作者: terse 时间: 2023-1-23 19:57
本帖最后由 terse 于 2023-1-23 22:54 编辑
这样呢- @echo off&setlocal enableDelayedExpansion
- (for /f "delims=" %%i in (a.txt) do (
- if not defined _"%%i" (
- echo,%%i
- set _"%%i"=%%i
- ) else if not "!_"%%i"!" == "%%i" echo %%i
- ))>b.txt
复制代码
没测试- @echo off&setlocal enableDelayedExpansion
- (for /f "delims=" %%i in (a.txt) do (
- if not "!_"%%i"!" == "%%i" echo %%i
- set _"%%i"=%%i
- ))>b.txt
复制代码
作者: qixiaobin0715 时间: 2023-1-24 10:04
本帖最后由 qixiaobin0715 于 2023-1-29 14:50 编辑
- @echo off
- setlocal enabledelayedexpansion
- set /p str=<1.txt
- (for /f "delims=" %%a in ('type 1.txt^|sort') do (
- if not "!str!"=="%%a" (
- echo,!str!
- )
- set str=%%a
- )
- echo,!str!)>2.txt
- pause
复制代码
作者: aloha20200628 时间: 2023-1-24 16:20
文本行去重是个经典话题,中外论坛老帖多多,但比较精简的批处理版本至少有两个。
一》find版本,上式区分大小写,下式不区分大小写,不保留空行
cd.>out.txt &for /f "delims=" %%s in (in.txt) do (find "%%~s" out.txt>nul||echo,%%s>>out.txt)
cd.>out.txt &for /f "delims=" %%s in (in.txt) do (find /i "%%~s" out.txt>nul||echo,%%s>>out.txt)
二》awk版本,区分大小写,保留空行
awk.exe "!existLines[$0]++" in.txt>out.txt
二者的算法虽然类似,但运行效率有所差别,尤其是对大数据文件(成千上万行+)。
find版的for...in()还会限制每行读入字符量不超过8k。
顺便再重复一下:set/p的单次读入字符量不能超过1k。
至于awk处理大数据文件的能限,可请已知者加注...
作者: aloha20200628 时间: 2023-1-24 17:01
补遗》本帖采用 findstr 对付无空格数据,匹配参数 /x "%%~s" 即可,若是有空格数据,须用 /xc:"%%~s" 匹配参数式 》
cd.>out.txt &for /f "delims=" %%s in (in.txt) do (findstr /xc:"%%~s" out.txt>nul||echo,%%s>>out.txt)
作者: 881966 时间: 2023-2-17 20:27
本帖最后由 881966 于 2023-2-18 16:18 编辑
现在又发现问题,有特殊字符的文本不能处理,有的汉字处理完了是乱码,空行不能保留,文本行顺序与原先不符,再次求助坛友,谢谢
测试文本上传多次不成功,只能贴出文本敬请坛友测试,本帖的代码都试了,很难描述清楚,谢谢大家:handshake
cpfxk&*^wcp
eee?==?fff
eeee#########
h20132052@%
-u0!JI.h9
fdsg@$
i-ab.co
⑨
a||game
""_St.w
//SeM***BW\
g272"|":|":l@785&^&&FG
c")
TheCollector"28hxmf62
7EJbfkctl40UTcbEsD5fyfPSZllW1kAsx7Qp5aN9pnsj2hbSRA4HR1NUVjSd8aYZqUfSkmeVZmR1P4SH07TsRj3LMkgrlC6dphIa4uCeRK8LGNNAwK0SIPVYK2FluEPbUV63GIc3sHS5f93oLumxgn2BRAFZJjz0QH5YbXmSNullvCDosW1aO64GBjyd4iMowzyPfsT3UAVzpo10ruNnWSno9zxoEhQHbBs7FLDIrvRhmbCY7sSaB8VYhyWxCfnuMdHI8r0eXC08BpbKXhRvyFBqk99PXjhKcdVPluCHo9FulP9SLlc9lO1nvzMBkq5oHoiPt5bPESlsT0JlICVzcI964Y2W0F8wP2lsj2vdZj5IA4dpUyJ4JkQEZ
[閾炬帴鐧诲綍鍚庡彲瑙乚
@銆佹彁鐞村瘎
ACG娓告垙寮
作者: 77七 时间: 2023-2-17 21:36
回复 8# 881966
把需要处理的文本 、使用的代码、 使用该代码遇到的问题,分开一一详细描述,不是更好能解决问题?
作者: 77七 时间: 2023-2-17 22:03
本帖最后由 77七 于 2023-2-17 22:06 编辑
- @echo off
- cd.>b.txt
- for /f "delims=" %%i in ('type "a.txt" ^| findstr /n .*') do (
- set "str=%%i"
- setlocal enabledelayedexpansion
- set "str=!str:*:=!"
- if "!str!" equ "" (
- >>b.txt echo,!str!
- ) else (
- findstr /x "!str!" "b.txt">nul || (>>b.txt echo,!str!)
- )
- endlocal
- )
- pause
复制代码
试试这样满足要求吗,如果不行,上传一个样本,再修改。批处理和文本都保存为ansi编码格式,试试吧
作者: fireye 时间: 2023-2-18 10:10
dedup /T xxx.txt >out.txt
dedup工具去第三方下载即可,很方便 。
作者: fireye 时间: 2023-2-18 10:12
gawk64 "a[$0]++" a.txt>b.txt
作者: 881966 时间: 2023-2-18 16:52
本帖最后由 881966 于 2023-2-18 17:02 编辑
测试文本上传多次不成功,只能贴出文本敬请坛友测试,本帖的代码都试了,遇到的问题很难描述清楚,谢谢大家
不知道为什么,文本都贴不全
作者: 77七 时间: 2023-2-18 18:19
- @echo off
- cd.>b.txt
- for /f "delims=" %%i in ('type "a.txt" ^| findstr /n .*') do (
- set "str=%%i"
- setlocal enabledelayedexpansion
- set "str=!str:*:=!"
- if "!str!" equ "" (
- >>b.txt echo,!str!
- ) else (
- type "b.txt" | findstr /x "!str!" 1>nul 2>nul || (>>b.txt echo,!str!)
- )
- endlocal
- )
- pause
复制代码
如果还是不行,请把测试失败的样本原件,测试失败生成的样本和批处理原件上传到网盘
作者: 881966 时间: 2023-2-18 18:53
回复 14# 77七
楼上所有的代码都试了,把我贴出的文本复制保存就可以,出错信息很难描述
谢谢你,麻烦了
作者: 77七 时间: 2023-2-18 19:26
回复 15# 881966
不提供出错信息,又不提供样本,让大家怎么帮你解决问题?你认为的“复制文本”就行,根本不是你想的那样,我既然发出来代码,能测试的我都测试过了,使用正常的
作者: 881966 时间: 2023-2-18 20:02
本帖最后由 881966 于 2023-2-18 20:04 编辑
回复 16# 77七
链接:https://pan.baidu.com/s/1hBw23ogZBNkwqplvrWr60g
提取码:1234
用14楼的代码
作者: 881966 时间: 2023-2-18 20:10
链接:https://pan.baidu.com/s/1W2FliVB36ZhutCqVA56G0g
提取码:1234
这是5楼代码
作者: 881966 时间: 2023-2-18 20:14
链接:https://pan.baidu.com/s/1GMbCqSYFM6KcCXfJQO47Pw
提取码:1234
这是10楼代码
作者: 881966 时间: 2023-2-18 20:20
链接:https://pan.baidu.com/s/1LWaWO1WtfaI9uOSMhprHng
提取码:1234
这是3楼代码
作者: 881966 时间: 2023-2-18 20:28
链接:https://pan.baidu.com/s/1ED_7kc5ASOuj8PLNoo0TaQ
提取码:1234
这是4楼代码
作者: Batcher 时间: 2023-2-18 20:43
回复 13# 881966
如果需要上传文件,可以用阿里云盘或百度网盘。
如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
作者: 881966 时间: 2023-2-18 21:08
回复 22# Batcher
谢谢管理 ,
今天好像异常,上传百度盘了
麻烦大家了:handshake
作者: 77七 时间: 2023-2-18 22:05
- @echo off
- cd.>b.txt
- for /f "delims=" %%i in ('type "a.txt" ^| findstr /n .*') do (
- set "str=%%i"
- setlocal enabledelayedexpansion
- set "str=!str:*:=!"
- if "!str!" equ "" (
- >>b.txt echo,!str!
- )
- if not "!str!" equ "" (
- set n=
- for /f "delims=" %%c in ("!str!") do (
- set "str3=%%c"
- )
- for /f "delims=" %%b in ('type "b.txt"') do (
- if "!str3!" equ "%%b" (
- set n=1
- )
- )
- if not defined n (
- >>b.txt echo,!str!
- )
- )
- endlocal
- )
- pause
复制代码
水平有限,想不出完美办法,只能折中,使用前手动替换全文中的"!"为其它字符,使用此代码后替换回"!",方可基本解决你的问题。
或者直接使用代码,特殊情况下会出错。
作者: WHY 时间: 2023-2-19 00:17
- @if(0)==(0) echo off
- cd /d "%~dp0"
- type a.txt | cscript //nologo //e:jscript "%~f0" > b.txt
- pause & exit
- @end
-
- var map = {}
- while(!WSH.StdIn.AtEndOfStream){
- var s = WSH.StdIn.ReadLine();
- if(s == ''){
- WSH.Echo(s);
- } else if(!map.hasOwnProperty(s)){
- map[s] = true;
- WSH.Echo(s);
- }
- }
复制代码
作者: 881966 时间: 2023-2-19 08:39
回复 24# 77七
再次感谢 ,让你费心了,
作者: 881966 时间: 2023-2-19 08:40
回复 25# WHY
谢谢坛友的帮助
作者: terse 时间: 2023-2-19 10:37
- @echo off
- powershell "$Hash = @{};(GC '.\a.txt').Where({if (!$Hash.Contains($_)){$Hash.Add($_,++$i)}});($Hash.GetEnumerator()| Sort Value).Key"
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |