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

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

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能搞吗?谢谢
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 4# tmplinshi
这次OK了,多谢斑竹!

TOP

回复 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

评分人数

TOP

回复 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数值较小的这一行该怎么弄,谢谢。

TOP

  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

评分人数

TOP

返回列表