中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-06 21:31
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 比较两个千行以上TXT的差异行 查看 1,946 回复 20
楼 主 比较两个千行以上TXT的差异行 发表于 2007-12-12 15:56 ·  中国 上海 浦东新区 电信
初级用户
★★
积分 196
发帖 82
注册 2005-09-26 11:31
20年会员
UID 42842
状态 离线
搜“删除行”只查到下面这一个帖子

求一个删除行的批处理
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 发表于 2007-12-12 16:17 ·  中国 浙江 温州 乐清市 电信
初级用户
★★
积分 109
发帖 52
注册 2006-01-03 22:47
20年会员
UID 48392
状态 离线
fc?
3 发表于 2007-12-12 16:24 ·  中国 上海 浦东新区 电信
初级用户
★★
积分 196
发帖 82
注册 2005-09-26 11:31
20年会员
UID 42842
状态 离线
……
咣,忘了这个东西了。
不过印象中它比较的文件好像不能超过多少行来着……
去试试先
4 发表于 2007-12-12 16:42 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
fc、findstr、awk……
5 发表于 2007-12-12 16:51 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
这样行不?

@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 ]
简单!简单!再简单!
6 发表于 2007-12-12 19:08 ·  中国 北京 海淀区 联通
银牌会员
★★★
积分 1,287
发帖 634
注册 2007-05-02 15:06
19年会员
UID 87277
性别 男
来自 cmd.exe
状态 离线
GAWK
7 发表于 2007-12-12 23:36 ·  中国 浙江 杭州 电信
高级用户
★★
积分 537
发帖 219
注册 2007-08-04 09:43
19年会员
UID 94620
性别 男
来自 杭州--半山
状态 离线
awk "NR==FNR{computername_b[$0]=$0};NR>FNR{if($0 in computername_b){} else {print $0}}" b.txt a.txt
8 发表于 2007-12-13 00:38 ·  中国 上海 浦东新区 电信
初级用户
★★
积分 196
发帖 82
注册 2005-09-26 11:31
20年会员
UID 42842
状态 离线
首先感谢各位的帮忙!
刚才试了5楼 code,
运行期间CPU usage 100%, A文件5200+,B文件2300+,执行时间11分钟。

awk快忘光了,今撑不住啦,明天测了再告诉大家结果~~
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
kissbill +1 2008-11-09 21:13
9 发表于 2007-12-13 10:43 ·  中国 北京 鹏博士BGP
高级用户
★★
朦胧的世界
积分 579
发帖 218
注册 2006-10-24 04:29
19年会员
UID 67972
状态 离线


findstr /vxg:a.txt b.txt

本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
pillow +2 2007-12-13 13:21

认识自己,降伏自己,改变自己
,才能改变别人!
10 发表于 2007-12-13 13:22 ·  中国 上海 浦东新区 电信
初级用户
★★
积分 196
发帖 82
注册 2005-09-26 11:31
20年会员
UID 42842
状态 离线
才發現我這個AWK的入門者目前還不能讀懂7樓 code,但還是要感謝junchen2,我再去充一下電,爭取晚上回復結果。

更要感謝9樓tao0610,只要2秒就出結果,code超級有效率!
11 发表于 2007-12-16 21:33 ·  中国 四川 泸州 联通
高级用户
★★★
积分 609
发帖 374
注册 2006-08-02 22:38
20年会员
UID 59720
状态 离线
Originally posted by tao0610 at 2007-12-13 10:43:


findstr /vxg:a.txt b.txt





文件大了根本无法执行
12 发表于 2007-12-16 23:10 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
Originally posted by ZJHJ at 2007-12-16 21:33:


文件大了根本无法执行


根据你的意思 你应该试一下:findstr /vg:b.txt a.txt>c.txt
简单!简单!再简单!
13 发表于 2007-12-17 08:28 ·  中国 上海 浦东新区 电信
初级用户
★★
积分 196
发帖 82
注册 2005-09-26 11:31
20年会员
UID 42842
状态 离线
12楼讲的对,确实有tao0610在9楼提供代码中a.txt, b.txt的位置互换,因为B才是search string。
14 发表于 2007-12-17 23:58 ·  中国 四川 泸州 联通
高级用户
★★★
积分 609
发帖 374
注册 2006-08-02 22:38
20年会员
UID 59720
状态 离线
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才算完成。(当然越简单越好了)
15 发表于 2007-12-18 00:31 ·  中国 广东 广州 天河区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线
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
论坛跳转: