标题: [求助]如何删除重复项
[打印本页]
作者: hgx126
时间: 2010-6-9 13:15
标题: [求助]如何删除重复项
我有多个类似文件,其中一个文件如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
求大家帮我写一批处理,并说明一下原理。谢谢。
作者: hgx126
时间: 2010-6-9 15:49
我自己写了一个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 ]
作者: ficn
时间: 2010-6-9 16:40
@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
作者: hgx126
时间: 2010-6-9 17:54
感谢ficn,请教 “if not defined %%e echo %%a^|%%b^|%%c^|%%d^|%%e^|%%f&set %%e=1)” 如何理解?特别是set %%e=1?
作者: hgx126
时间: 2010-6-9 18:41
另外,我把你那个加工了一下,如下,却执行错误,为何?
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 ]
作者: HAT
时间: 2010-6-9 19:48
gawk -F "|" "!a[$5]++" 1.txt >2.txt
作者: hgx126
时间: 2010-6-9 22:25
HAT版主,太崇拜你了!!!
高手就是不一样,效率太高了。
HAT,爱你!
呵呵
作者: hgx126
时间: 2010-6-9 22:39
HAT版主,我怎么在网上没有找到gawk的这个用法的教程?能指点一下吗?
[
Last edited by hgx126 on 2010-6-13 at 20:57 ]