标题: [文本处理] [已解决]批处理怎样把txt文本根据每行部分内容匹配去重 [打印本页]
作者: lantern 时间: 2015-1-17 07:36 标题: [已解决]批处理怎样把txt文本根据每行部分内容匹配去重
txt文件- 列A 列B 列C 列D
- 1.2.3.4 56 字符串 字符串
- 5.6.7.8 99 字符串 字符串
- 2.3.4.5 56 字符串 字符串
- 6.7.8.9 99 字符串 字符串
- 1.2.3.4 76 字符串 字符串
- 5.6.7.8 45 字符串 字符串
复制代码
列A为主对比项,列B为次对比项
列A无相同行时,保留这一行
列A有相同行时,保留列B数值较小的那一行
这样的去重bat能搞吗?谢谢
作者: tmplinshi 时间: 2015-1-17 14:03
- @echo off
- setlocal enabledelayedexpansion
- (for /f "tokens=1,2,*" %%a in ('sort a.txt') do (
- if "%%a" neq "!last_col1!" (
- if defined last_col1 (
- echo !full_line!
- )
- set last_col1=%%a
- set n=%%b
- set full_line=%%a %%b %%c
- ) else (
- if %%b lss !n! (
- set n=%%b
- set full_line=%%a %%b %%c
- )
- )
- )) >result.txt
复制代码
作者: lantern 时间: 2015-1-17 15:09
回复 2# tmplinshi
多谢。
有个问题:处理的结果少一行。
txt- 1.2.3.4 56 字符串 字符串
- 5.6.7.8 99 字符串 字符串
- 2.3.4.5 56 字符串 字符串
- 6.7.8.9 99 字符串 字符串
- 1.2.3.4 76 字符串 字符串
- 5.6.7.8 45 字符串 字符串
复制代码
输出的结果是- 1.2.3.4 56 字符串 字符串
- 2.3.4.5 56 字符串 字符串
- 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数值较小的这一行该怎么弄,谢谢。
作者: tmplinshi 时间: 2015-1-17 18:31
回复 3# lantern - @echo off
- setlocal enabledelayedexpansion
- (
- for /f "tokens=1,2,*" %%a in ('sort a.txt') do (
- if "%%a" neq "!last_col1!" (
- if defined last_col1 (
- echo !full_line!
- set finishedCol1=!last_col1!
- )
- set last_col1=%%a
- set n=%%b
- if "!n!" == "" (set n=空)
- set full_line=%%a !n! %%c
- ) else (
- if %%b lss !n! (
- set n=%%b
- set full_line=%%a %%b %%c
- )
- )
- )
-
- if "!finishedCol1!" neq "!last_col1!" (
- echo !full_line!
- )
- ) >result.txt
复制代码
作者: lantern 时间: 2015-1-17 19:46
回复 4# tmplinshi
这次OK了,多谢斑竹!
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |