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

[文本处理] [已解决]批处理怎样把txt文本根据每行部分内容匹配去重

[复制链接]
发表于 2015-1-17 07:36:35 | 显示全部楼层 |阅读模式
txt文件

  1. 列A        列B        列C        列D
  2. 1.2.3.4        56        字符串        字符串
  3. 5.6.7.8        99        字符串        字符串
  4. 2.3.4.5        56        字符串        字符串
  5. 6.7.8.9        99        字符串        字符串
  6. 1.2.3.4        76        字符串        字符串
  7. 5.6.7.8        45        字符串        字符串
复制代码
列A为主对比项,列B为次对比项
列A无相同行时,保留这一行
列A有相同行时,保留列B数值较小的那一行
这样的去重bat能搞吗?谢谢

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2015-1-17 14:03:28 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "tokens=1,2,*" %%a in ('sort a.txt') do (
  4.     if "%%a" neq "!last_col1!" (
  5.         if defined last_col1 (
  6.             echo !full_line!
  7.         )
  8.         set last_col1=%%a
  9.         set n=%%b
  10.         set full_line=%%a    %%b    %%c
  11.     ) else (
  12.         if %%b lss !n! (
  13.             set n=%%b
  14.             set full_line=%%a    %%b    %%c
  15.         )
  16.     )
  17. )) >result.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
lantern + 1 多谢

查看全部评分

 楼主| 发表于 2015-1-17 15:09:30 | 显示全部楼层
回复 2# tmplinshi
多谢。
有个问题:处理的结果少一行。
txt
  1. 1.2.3.4        56        字符串        字符串
  2. 5.6.7.8        99        字符串        字符串
  3. 2.3.4.5        56        字符串        字符串
  4. 6.7.8.9        99        字符串        字符串
  5. 1.2.3.4        76        字符串        字符串
  6. 5.6.7.8        45        字符串        字符串
复制代码
输出的结果是

  1. 1.2.3.4    56    字符串        字符串
  2. 2.3.4.5    56    字符串        字符串
  3. 5.6.7.8    45    字符串        字符串
复制代码
少了“6.7.8.9        99        字符串        字符串”这一行,我用一个大文件运行了一下,列A去重后是22646行,但result.txt只有22645行
另外还有下面一种情况:
1.2.3.4
1.2.3.4        76        字符串        字符串
1.2.3.4        45        字符串        字符串
就是列A相同,列B  列C  列D有可能为空,想保留不为空且列B数值较小的这一行该怎么弄,谢谢。
发表于 2015-1-17 18:31:04 | 显示全部楼层
回复 3# lantern
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (
  4.     for /f "tokens=1,2,*" %%a in ('sort a.txt') do (
  5.         if "%%a" neq "!last_col1!" (
  6.             if defined last_col1 (
  7.                 echo !full_line!
  8.                 set finishedCol1=!last_col1!
  9.             )
  10.             set last_col1=%%a
  11.             set n=%%b
  12.             if "!n!" == "" (set n=空)
  13.             set full_line=%%a    !n!    %%c
  14.         ) else (
  15.             if %%b lss !n! (
  16.                 set n=%%b
  17.                 set full_line=%%a    %%b    %%c
  18.             )
  19.         )
  20.     )
  21.    
  22.     if "!finishedCol1!" neq "!last_col1!" (
  23.         echo !full_line!
  24.     )
  25. ) >result.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
lantern + 1 感谢

查看全部评分

 楼主| 发表于 2015-1-17 19:46:40 | 显示全部楼层
回复 4# tmplinshi
这次OK了,多谢斑竹!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 21:31 , Processed in 0.015242 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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