找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 20822|回复: 5

[文本处理] 批处理如何删除含有特定内容的重复行?【已解决】

[复制链接]
发表于 2022-11-22 23:46:52 | 显示全部楼层 |阅读模式
本帖最后由 每天几分 于 2022-11-23 10:10 编辑

如:


  1. 出        be#固
  2. 时        ec#固
  3. 们        bc#固
  4. 得        si#固
  5. 上        be#固
  6. 成        bc#固
  7. ……
复制代码
删除:

  1. 上        be#固
  2. 成        bc#固
复制代码
实现:

  1. 出        be#固
  2. 时        ec#固
  3. 们        bc#固
  4. 得        si#固
  5. ……
复制代码
即前面所在行出现过“be#固、bc#固……”,就把后面带“be#固、bc#固……”所在行删除。
文本格式都是固定的:字+制表符+2个随机字母+#固,可以通过制表符后面的内容,来判定重复。
发表于 2022-11-23 08:41:17 | 显示全部楼层

  1. 出        be#固
  2. 时        ec#固
  3. 们        bc#固
  4. 得        si#固
  5. 上        be#固
  6. 成        bc#固
复制代码
以ANSI编码格式保存为1.txt
下载( http://bcn.bathome.net/tool/4.1.0/gawk.exe
执行:

  1. gawk "!a[$2]++" 1.txt>2.txt
复制代码
结果( 2.txt )

  1. 出      be#固
  2. 时      ec#固
  3. 们      bc#固
  4. 得      si#固
复制代码

评分

参与人数 1技术 +1 收起 理由
每天几分 + 1 多谢,就是这种效果

查看全部评分

发表于 2022-11-23 09:46:15 | 显示全部楼层
回复 1# 每天几分


如果输出的行序没有严格要求:
  1. @echo off
  2. cd /d "%~dp0"
  3. setlocal
  4. for /f "tokens=1*" %%i in ('type "1.txt"') do (
  5.     if not defined _%%j (
  6.         set "_%%j=%%i        %%j"
  7.     )
  8. )
  9. (for /f "tokens=1* delims==" %%i in ('set _') do (
  10.     echo,%%j
  11. ))>"2.txt"
  12. endlocal
复制代码

评分

参与人数 1技术 +1 收起 理由
每天几分 + 1 这个也行,感谢分享

查看全部评分

发表于 2022-11-23 12:59:52 | 显示全部楼层
  1. @if(0)==(0) echo off
  2. type 1.txt | cscript //nologo //e:jscript "%~f0" > 2.txt
  3. pause & exit /b
  4. @end

  5. var obj = {};
  6. while( !WSH.StdIn.AtEndOfStream ){
  7.     var s = WSH.StdIn.ReadLine();
  8.     var m = s.match(/^\S+\t(\S+)$/);
  9.     if( m == null || obj.hasOwnProperty(m[1]) ) continue;
  10.     obj[m[1]] = true;
  11.     WSH.Echo(s);
  12. }
复制代码
发表于 2022-11-23 13:23:10 | 显示全部楼层
test.ps1
  1. $srcFile = '1.txt';      #源文件名
  2. $dstFile = '2.txt';      #修改后的文件名
  3. $hash = @{};
  4. $res  = [Collections.ArrayList]@();

  5. forEach( $strLine In [IO.File]::ReadAllLines($srcFile, [Text.Encoding]::Default) ){
  6.     $arr = $strLine.Trim().Split();
  7.     if( $arr.Count -eq 2 -and !$hash.ContainsKey($arr[1]) ){
  8.         $hash.Add( $arr[1], $true );
  9.         [void]$res.Add( $strLine );
  10.     }
  11. }

  12. [IO.File]::WriteAllLines( $dstFile, $res, [Text.Encoding]::Default );
复制代码
发表于 2022-11-24 09:31:28 | 显示全部楼层
  1. @echo off
  2. (for /f "tokens=1* delims=        " %%i in (1.txt) do (
  3.     if not defined _"%%j" (
  4.         echo,%%i        %%j
  5.         set _"%%j"=true
  6.     )
  7. ))>2.txt
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 11:45 , Processed in 0.020209 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表