中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-07-04 14:00
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]如何删除重复项 查看 739 回复 7
楼 主 [求助]如何删除重复项 发表于 2010-06-09 13:15 ·  中国 四川 南充 阆中市 电信
初级用户
★★
积分 100
发帖 80
注册 2008-09-12 15:08
17年会员
UID 125478
性别 男
状态 离线
我有多个类似文件,其中一个文件如a.txt|内容如下:

5411|12310001|0|4001|88130123811353|0|2007-9-17|2008-9-16
5411|12310001|2|4001|88130095886594|0|2007-3-13|2008-3-10
5411|12610001|2|4001|88130095886594|0|2008-3-11|2008-3-10
5411|12710001|2|4001|88130095886594|0|2008-6-9|2008-3-10
5411|12510101|0|4002|88130095831651|0|2005-10-26|2007-10-20
5411|12310001|0|4001|88130114084344|0|2007-5-22|2007-10-21
5411|12610001|0|4001|88130114084344|0|2007-5-22|2007-10-21
5411|12310001|0|4001|88130120106445|0|2007-8-2|2008-8-1

我需要将每行第5列(以“|”作为分隔符)中的数据与上一行第5列的数据作比较,如果相同,则删除该整行。其结果如下:

5411|12310001|0|4001|88130123811353|0|2007-9-17|2008-9-16
5411|12310001|2|4001|88130095886594|0|2007-3-13|2008-3-10
5411|12510101|0|4002|88130095831651|0|2005-10-26|2007-10-20
5411|12310001|0|4001|88130114084344|0|2007-5-22|2007-10-21
5411|12310001|0|4001|88130120106445|0|2007-8-2|2008-8-1

求大家帮我写一批处理,并说明一下原理。谢谢。
2 发表于 2010-06-09 15:49 ·  中国 四川 南充 阆中市 电信
初级用户
★★
积分 100
发帖 80
注册 2008-09-12 15:08
17年会员
UID 125478
性别 男
状态 离线
我自己写了一个p处理,为什么第二次执行到“if not defined two goto :sk”报错:命令语法不正确。
set two=
for /f "tokens=1-5,* delims=|" %%a in (a.txt) do (
call :sub %%a %%b %%c %%d %%e "%%e"
)
goto :eof

:sub
if not defined two goto :sk
if not "%two%"=="%5" echo %str%>>b.txt

:sk
set "two=%5"
set "str=%1|%2|%3|%4|%5|%~6"
goto :eof


[ Last edited by hgx126 on 2010-6-9 at 16:51 ]
3 发表于 2010-06-09 16:40 ·  中国 福建 龙岩 电信
初级用户
积分 30
发帖 15
注册 2008-06-23 23:11
18年会员
UID 120750
性别 男
状态 离线
@echo off
for /f "tokens=1-5* delims=|" %%a in (a.txt) do (
if not defined %%e echo %%a^|%%b^|%%c^|%%d^|%%e^|%%f&set %%e=1)
pause
4 发表于 2010-06-09 17:54 ·  中国 四川 南充 阆中市 电信
初级用户
★★
积分 100
发帖 80
注册 2008-09-12 15:08
17年会员
UID 125478
性别 男
状态 离线
感谢ficn,请教 “if not defined %%e echo %%a^|%%b^|%%c^|%%d^|%%e^|%%f&set %%e=1)” 如何理解?特别是set %%e=1?
5 发表于 2010-06-09 18:41 ·  中国 四川 南充 阆中市 电信
初级用户
★★
积分 100
发帖 80
注册 2008-09-12 15:08
17年会员
UID 125478
性别 男
状态 离线
另外,我把你那个加工了一下,如下,却执行错误,为何?
for %%z in (*.txt) do (
for /f "tokens=1-5* delims=|" %%a in (%%z) do (
if not defined %%g echo "%%a^|%%b^|%%c^|%%d^|%%e^|%%f">>"%%~nz%.csv"&set %%g=1
)
)


[ Last edited by hgx126 on 2010-6-9 at 19:36 ]
6 发表于 2010-06-09 19:48 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线

gawk -F "|" "!a++" 1.txt >2.txt
7 发表于 2010-06-09 22:25 ·  中国 四川 南充 电信
初级用户
★★
积分 100
发帖 80
注册 2008-09-12 15:08
17年会员
UID 125478
性别 男
状态 离线
HAT版主,太崇拜你了!!!
高手就是不一样,效率太高了。
HAT,爱你!
呵呵
8 发表于 2010-06-09 22:39 ·  中国 四川 南充 电信
初级用户
★★
积分 100
发帖 80
注册 2008-09-12 15:08
17年会员
UID 125478
性别 男
状态 离线
HAT版主,我怎么在网上没有找到gawk的这个用法的教程?能指点一下吗?

[ Last edited by hgx126 on 2010-6-13 at 20:57 ]
论坛跳转: