中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 比较两个千行以上TXT的差异行
« [1] [2] »
作者:
标题: 比较两个千行以上TXT的差异行 上一主题 | 下一主题
pillow
初级用户





积分 196
发帖 82
注册 2005-9-26
状态 离线
『楼 主』:  比较两个千行以上TXT的差异行

搜“删除行”只查到下面这一个帖子

求一个删除行的批处理
http://www.cn-dos.net/forum/view ... id=WvtvSg#pid245486

前提条件:
两个TXT文件,分别有5000行+(命名为A)和2000行+(命名为B),只有一列,内容为计算机名。

我要处理的问题有点极端,需要将A文件中有而B文件中没有的行比较出来。目前想到的方式只有从A中逐条删除B中的记录,这若是搜到的方式岂不是要生成几千个文件?(那个方式若针对单行删除和小文件倒真的是超好的方法)
而且似乎也谈不上效率了,请问哪位知道有没有用P处理的更好思路?

PS:现在有点想钻牛角头,只想用P,不想再装SQL什么的那么麻烦了。

2007-12-12 15:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dooomer
初级用户





积分 109
发帖 52
注册 2006-1-3
状态 离线
『第 2 楼』:  

fc?

2007-12-12 16:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pillow
初级用户





积分 196
发帖 82
注册 2005-9-26
状态 离线
『第 3 楼』:  

……
咣,忘了这个东西了。
不过印象中它比较的文件好像不能超过多少行来着……
去试试先

2007-12-12 16:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 4 楼』:  

fc、findstr、awk……

2007-12-12 16:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 5 楼』:  

这样行不?
@echo off
for /f "delims=" %%a in (a.txt) do (
findstr /i %%a b.txt
if errorlevel 1 echo %%a>>c.txt
)
也可以这样:
@echo off
for /f "delims=" %%a in (a.txt) do findstr /i %%a b.txt >nul 2>nul|| echo %%a>>c.txt

[ Last edited by terse on 2007-12-12 at 05:54 PM ]



简单!简单!再简单!
2007-12-12 16:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
knoppix7
银牌会员





积分 1287
发帖 634
注册 2007-5-2
来自 cmd.exe
状态 离线
『第 6 楼』:  

GAWK

2007-12-12 19:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复
junchen2
高级用户





积分 537
发帖 219
注册 2007-8-4
来自 杭州--半山
状态 离线
『第 7 楼』:  

awk "NR==FNR{computername_b[$0]=$0};NR>FNR{if($0 in computername_b){} else {print  $0}}" b.txt a.txt

2007-12-12 23:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pillow
初级用户





积分 196
发帖 82
注册 2005-9-26
状态 离线
『第 8 楼』:  

首先感谢各位的帮忙!
刚才试了5楼 code,
运行期间CPU usage 100%, A文件5200+,B文件2300+,执行时间11分钟。

awk快忘光了,今撑不住啦,明天测了再告诉大家结果~~

   此帖被 +1 点积分    点击查看详情   
评分人:【 kissbill 分数: +1  时间:2008-11-9 21:13


2007-12-13 00:38
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tao0610
高级用户

朦胧的世界


积分 579
发帖 218
注册 2006-10-24
状态 离线
『第 9 楼』:  


findstr /vxg:a.txt b.txt


   此帖被 +2 点积分    点击查看详情   
评分人:【 pillow 分数: +2  时间:2007-12-13 13:21





认识自己,降伏自己,改变自己
,才能改变别人!
2007-12-13 10:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pillow
初级用户





积分 196
发帖 82
注册 2005-9-26
状态 离线
『第 10 楼』:  

才發現我這個AWK的入門者目前還不能讀懂7樓 code,但還是要感謝junchen2,我再去充一下電,爭取晚上回復結果。

更要感謝9樓tao0610,只要2秒就出結果,code超級有效率!

2007-12-13 13:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ZJHJ
高级用户





积分 609
发帖 374
注册 2006-8-2
状态 离线
『第 11 楼』:  



  Quote:
Originally posted by tao0610 at 2007-12-13 10:43:
findstr /vxg:a.txt b.txt

文件大了根本无法执行

2007-12-16 21:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 12 楼』:  



  Quote:
Originally posted by ZJHJ at 2007-12-16 21:33:


文件大了根本无法执行

根据你的意思 你应该试一下:findstr /vg:b.txt a.txt>c.txt



简单!简单!再简单!
2007-12-16 23:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pillow
初级用户





积分 196
发帖 82
注册 2005-9-26
状态 离线
『第 13 楼』:  

12楼讲的对,确实有tao0610在9楼提供代码中a.txt, b.txt的位置互换,因为B才是search string。

2007-12-17 08:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ZJHJ
高级用户





积分 609
发帖 374
注册 2006-8-2
状态 离线
『第 14 楼』:  



  Quote:
Originally posted by terse at 2007-12-16 23:10:


根据你的意思 你应该试一下:findstr /vg:b.txt a.txt>c.txt

我看你们也没有试过!

如果你按"修改时间"记录你机器中所有分区的 exe、dll、inf 文件及路径,不包括*.*

大致有8000行左右.

你复制一份并修改内容作为a或b,

看看c.txt 中有没有就知道了? 看看会告诉你什么?

--------------

我是将无病毒、无木马的系统,包括所有分区的 exe 、dll、 inf 文件按"修改时

间"文件大小及路径记录。如果文件被感染,"修改时间"和文件大小必然被修改,

a、b两个文件各有7000-10000行,大小各500k-1M,要比较a、b两个文件的差

异行,其实我的要求比楼主还要高,既要差异行,也要原始行,还要新增行。并

且差异行、原始行要排在一起(决对不能错位),新增行单独。显示要洁净明了。

如果用上面的方法根本无法完成,用fc显示实在太乱,也无法查看。我写了几K的

p才算完成。(当然越简单越好了)

2007-12-17 23:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 15 楼』:  

to ZJHJ

我试了,没问题
for /l %i in (1,1,50000) do echo test:\\//\\//abcedfghijklmnopqrstuvwxyz%i>>A.txt
copy a.txt b.txt
findstr /xg:b.txt a.txt >c.txt
你在findstr /vxg:b.txt a.txt >c.txt这个命令中看不到c.txt的内容,那是因为你的源文件与目标文件是相同的
windows nt的一个变量都可以达到1024Kb

2007-12-18 00:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: