中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [求助]如何删除重复项 上一主题 | 下一主题
hgx126
初级用户





积分 100
发帖 80
注册 2008-9-12
状态 离线
『楼 主』:  [求助]如何删除重复项

我有多个类似文件,其中一个文件如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
求大家帮我写一批处理,并说明一下原理。谢谢。

2010-6-9 13:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
hgx126
初级用户





积分 100
发帖 80
注册 2008-9-12
状态 离线
『第 2 楼』:  

我自己写了一个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 ]

2010-6-9 15:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ficn
初级用户





积分 30
发帖 15
注册 2008-6-23
状态 离线
『第 3 楼』:  

@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

2010-6-9 16:40
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
hgx126
初级用户





积分 100
发帖 80
注册 2008-9-12
状态 离线
『第 4 楼』:  

感谢ficn,请教 “if not defined %%e echo %%a^|%%b^|%%c^|%%d^|%%e^|%%f&set %%e=1)” 如何理解?特别是set %%e=1?

2010-6-9 17:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
hgx126
初级用户





积分 100
发帖 80
注册 2008-9-12
状态 离线
『第 5 楼』:  

另外,我把你那个加工了一下,如下,却执行错误,为何?
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 ]

2010-6-9 18:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 6 楼』:  


gawk -F "|" "!a[$5]++" 1.txt >2.txt




2010-6-9 19:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hgx126
初级用户





积分 100
发帖 80
注册 2008-9-12
状态 离线
『第 7 楼』:  

HAT版主,太崇拜你了!!!
高手就是不一样,效率太高了。
HAT,爱你!
呵呵

2010-6-9 22:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
hgx126
初级用户





积分 100
发帖 80
注册 2008-9-12
状态 离线
『第 8 楼』:  

HAT版主,我怎么在网上没有找到gawk的这个用法的教程?能指点一下吗?

[ Last edited by hgx126 on 2010-6-13 at 20:57 ]

2010-6-9 22:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: