标题: [文本处理] [已解决]批处理如何删除连续重复行,只保留显示一行? [打印本页]
作者: pengli0108 时间: 2012-12-17 10:23 标题: [已解决]批处理如何删除连续重复行,只保留显示一行?
需求如题目,
如本身数据为:
a 1
a 1
b 2
c 3
c 3
a 1
期望其转化的结果是:
a 1
b 2
c 3
a 1
一直没想明白这个算法的实现,用bat
还请高人指点迷津,多谢多谢
作者: apang 时间: 2012-12-17 12:54
- @echo off&setlocal enabledelayedexpansion
- (for /f "delims=" %%a in (a.txt) do (
- if "!str!" neq "%%a" echo,%%a
- set "str=%%a"
- ))>b.txt
复制代码
作者: BAT-VBS 时间: 2012-12-17 18:28
复制代码
作者: pengli0108 时间: 2012-12-26 15:49
回复 2# apang
有一个追问
我的test文件是这样的
414.08 2012-10-10 10:10 0
414.08 2012-10-10 10:10 0
414.08 2012-10-10 10:10 0
414.08 2012-10-10 10:10 0
414.08 2012-10-10 10:10 0
414.08 2012-10-10 10:10 0
414.08 2012-10-10 10:10 0
414.08 2012-10-10 10:10 0
414.08 2012-10-10 10:10 0
414.08 2012-10-10 10:10 0
414.08 2012-10-10 10:10 0
414.08 2012-10-10 10:11 0
我的代码是- @echo off & setlocal enabledelayedexpansion
- cd.>new.txt
- for /f "tokens=1,2,3,4 delims= " %%a in (test.txt) do (
-
- if !str! neq %%a set str=%%a&echo %%a >>new.txt
-
- )
复制代码
运行后
输出是:
414.08 2012-10-10
为何我的echo 只设置了一个%%a,他会给我出来两列?觉得比较困惑
多谢了哈
作者: apang 时间: 2012-12-26 16:26
本帖最后由 apang 于 2012-12-26 16:32 编辑
回复 4# pengli0108
第一列与第二列之间不是空格,而是跳格(Tab)?
话说只比较第一列的话,for /f %%a in (test.txt) do ...
即tokens和delims 可以省略
作者: pengli0108 时间: 2012-12-26 17:09
回复 5# apang
这个我也不太清楚第一列与第二列的数据间隔是什么,数据是从excel里边copy过来的
其实去掉重复行的需求我已经满足了,只是很疑惑为何输出会是一个%%a,就有两列,其实我是四列都要,但是我只需要三个参数%%a,%%b,%%c而不是四个。
作者: BAT-VBS 时间: 2012-12-26 21:41
回复 6# pengli0108
把那个txt文件压缩一下,传上来看看。
作者: pengli0108 时间: 2013-1-2 16:32
回复 7# BAT-VBS
好的,已经贴上去了,麻烦看看,让后生多多学习。
作者: BAT-VBS 时间: 2013-1-2 20:45
回复 8# pengli0108
试试这个
作者: pengli0108 时间: 2013-1-7 09:57
回复 9# BAT-VBS
好用了,但是不太明白其中的原由。我看了下,确实我之前的数据之间可能有的是空格,有的是TAb隔开的。- @echo off
- setlocal enabledelayedexpansion
- (for /f "tokens=1,2,3,4 delims= " %%a in (test.txt) do (
- if "!str!" neq "%%a" (
- set "str=%%a"
- echo,%%a---%%b---%%c---%%d
- )
- ))>new.txt
复制代码
中间if "!str!" neq "%%a" 为何两边都加引号,还有内部的set "str=%%a"
不是很清楚这块儿
谢谢哈,麻烦你了。多谢
作者: BAT-VBS 时间: 2013-1-7 10:12
回复 10# pengli0108
为了防止字符串里面有特殊字符的时候代码出错
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |