![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-07 01:40 |
共 48,040 主题排行 / 350,125 发帖 / 今日 1 篇 / 48,252 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 比较两个千行以上TXT的差异行 |
| 可打印版本 1,958 / 20 |
| 第1楼 pillow | 发表于 2007-12-12 15:56 |
| 初级用户 发帖 82 积分 196 | |
|
比较两个千行以上TXT的差异行 搜“删除行”只查到下面这一个帖子
求一个删除行的批处理 http://www.cn-dos.net/forum/viewthread.php?tid=23894&pid=245486&page=1&sid=WvtvSg#pid245486 前提条件: 两个TXT文件,分别有5000行+(命名为A)和2000行+(命名为B),只有一列,内容为计算机名。 我要处理的问题有点极端,需要将A文件中有而B文件中没有的行比较出来。目前想到的方式只有从A中逐条删除B中的记录,这若是搜到的方式岂不是要生成几千个文件?(那个方式若针对单行删除和小文件倒真的是超好的方法) 而且似乎也谈不上效率了,请问哪位知道有没有用P处理的更好思路? PS:现在有点想钻牛角头,只想用P,不想再装SQL什么的那么麻烦了。 |
|
| 第2楼 dooomer | 发表于 2007-12-12 16:17 |
| 初级用户 发帖 52 积分 109 | |
|
fc?
|
|
| 第3楼 pillow | 发表于 2007-12-12 16:24 |
| 初级用户 发帖 82 积分 196 | |
|
……
咣,忘了这个东西了。 不过印象中它比较的文件好像不能超过多少行来着…… 去试试先 |
|
| 第4楼 lxmxn | 发表于 2007-12-12 16:42 |
| 版主 发帖 4,938 积分 11,386 | |
|
fc、findstr、awk……
|
|
| 第5楼 terse | 发表于 2007-12-12 16:51 |
| 银牌会员 发帖 946 积分 2,404 | |
|
这样行不?
也可以这样: @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 ] |
|
| 第6楼 knoppix7 | 发表于 2007-12-12 19:08 |
| 银牌会员 发帖 634 积分 1,287 来自 cmd.exe | |
|
GAWK
|
|
| 第7楼 junchen2 | 发表于 2007-12-12 23:36 |
| 高级用户 发帖 219 积分 537 来自 杭州--半山 | |
|
awk "NR==FNR{computername_b[$0]=$0};NR>FNR{if($0 in computername_b){} else {print $0}}" b.txt a.txt
|
|
| 第8楼 pillow | 发表于 2007-12-13 00:38 |
| 初级用户 发帖 82 积分 196 | |
|
首先感谢各位的帮忙!
刚才试了5楼 code, 运行期间CPU usage 100%, A文件5200+,B文件2300+,执行时间11分钟。 awk快忘光了,今撑不住啦,明天测了再告诉大家结果~~ |
|
| 第9楼 tao0610 | 发表于 2007-12-13 10:43 |
| 高级用户 发帖 218 积分 579 | |
| 第10楼 pillow | 发表于 2007-12-13 13:22 |
| 初级用户 发帖 82 积分 196 | |
|
才發現我這個AWK的入門者目前還不能讀懂7樓 code,但還是要感謝junchen2,我再去充一下電,爭取晚上回復結果。
更要感謝9樓tao0610,只要2秒就出結果,code超級有效率! |
|
| 第11楼 ZJHJ | 发表于 2007-12-16 21:33 |
| 高级用户 发帖 374 积分 609 | |
Originally posted by tao0610 at 2007-12-13 10:43: 文件大了根本无法执行 |
|
| 第12楼 terse | 发表于 2007-12-16 23:10 |
| 银牌会员 发帖 946 积分 2,404 | |
Originally posted by ZJHJ at 2007-12-16 21:33: 根据你的意思 你应该试一下:findstr /vg:b.txt a.txt>c.txt |
|
| 第13楼 pillow | 发表于 2007-12-17 08:28 |
| 初级用户 发帖 82 积分 196 | |
|
12楼讲的对,确实有tao0610在9楼提供代码中a.txt, b.txt的位置互换,因为B才是search string。
|
|
| 第14楼 ZJHJ | 发表于 2007-12-17 23:58 |
| 高级用户 发帖 374 积分 609 | |
Originally posted by terse at 2007-12-16 23:10: 我看你们也没有试过! 如果你按"修改时间"记录你机器中所有分区的 exe、dll、inf 文件及路径,不包括*.* 大致有8000行左右. 你复制一份并修改内容作为a或b, 看看c.txt 中有没有就知道了? 看看会告诉你什么? -------------- 我是将无病毒、无木马的系统,包括所有分区的 exe 、dll、 inf 文件按"修改时 间"文件大小及路径记录。如果文件被感染,"修改时间"和文件大小必然被修改, a、b两个文件各有7000-10000行,大小各500k-1M,要比较a、b两个文件的差 异行,其实我的要求比楼主还要高,既要差异行,也要原始行,还要新增行。并 且差异行、原始行要排在一起(决对不能错位),新增行单独。显示要洁净明了。 如果用上面的方法根本无法完成,用fc显示实在太乱,也无法查看。我写了几K的 p才算完成。(当然越简单越好了) |
|
| 第15楼 everest79 | 发表于 2007-12-18 00:31 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
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 |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |