标题: [文本处理] [已解决]批处理使用第三方命令,如何实现2个文本相减? [打印本页]
作者: jzsgyml 时间: 2012-6-8 11:35 标题: [已解决]批处理使用第三方命令,如何实现2个文本相减?
本帖最后由 jzsgyml 于 2012-6-26 14:51 编辑
也就是要1.txt - 2.txt =?
用批处理一个个遍历,几万行就要几小时,几十万行几天时间了
例如1.txt复制代码
2.txt复制代码
得到结果3.txt复制代码
普通“findstr /c:"%%a" B.txt>nul||echo %%a>>C.txt”语句一行行判断效率太低,有几百万行呢,特来请教
作者: powerbat 时间: 2012-6-8 12:09
不用第三方工具也可以。
作者: jzsgyml 时间: 2012-6-8 12:44
回复 2# powerbat - findstr/vg:a.txt b.txt>c.txt
复制代码
不用第三方慢得哭
作者: powerbat 时间: 2012-6-8 12:57
原来相减是这个意思?
findstr还有bug。操作系统自带命令多的是。
作者: jzsgyml 时间: 2012-6-8 14:03
原来相减是这个意思?
findstr还有bug。操作系统自带命令多的是。
powerbat 发表于 2012-6-8 12:57
- for /f %%a in (A.txt) do (
- findstr /c:"%%a" B.txt>nul||echo %%a>>C.txt
- )
复制代码
用findstr 就是一行行来,1万行就1万次,效率自然成倍的降低了,请问你有更效率的方法吗
作者: powerbat 时间: 2012-6-8 14:29
findstr的bug可以看这个- set >env
- set | findstr /vg:env
- set | findstr /vxg:env
- set | findstr /vlg:env
- set | findstr /vrg:env
复制代码
你的数据有何特点?每行长度一般是多少?由什么字符组成?最好给出一段样本。
作者: jzsgyml 时间: 2012-6-8 14:45
回复 6# powerbat
A.txt 都是单词表,B.txt是已经背诵的单词表,几十万,需要A-B。- good 好
- best 好
- best 好
- good 好
复制代码
作者: forfiles 时间: 2012-6-24 18:51
请教一下不使用第三方的原因是?
作者: wc726842270 时间: 2012-6-26 02:05
如果再给出其它的命令也许仅仅是换了一下汤而以
1:如果同时打开2个以上的大文件,你的缓存能受得了么?(我从来没打开过1G以上的文件)
2:要是从P入手的话可能只是CMD内置的命令了
以上仅是个人想法
作者: asd821089612 时间: 2012-6-26 07:33
能不能用cmd里的"fc"这个命令
再用for命令截取里面的不同处就可以了
作者: asd821089612 时间: 2012-6-26 07:59
- @echo off
- fc 2.txt 1.txt>3.txt
- for /f "delims=\ skip=3 eol=*" %%i in (3.txt) do (@echo %%i>>4.txt)
- del 3.txt
复制代码
由于楼主默认2.txt永远比1.txt内容少,所以fc只显示1.txt的多余部分,因此就可以达到目的了。
最后输出的是4.txt
虽然是一种思路,但是为测试过楼主所说的几万行的大文件,不知道速度怎么样
作者: jzsgyml 时间: 2012-6-26 14:52
能不能用cmd里的"fc"这个命令
再用for命令截取里面的不同处就可以了
asd821089612 发表于 2012-6-26 07:33
谢谢,我标题好像改出歧义了,我的意思是cmd太慢,有没有第三方好些的。你说的fc确实是一个方法,逻辑上都比find一行一行对比强,谢谢
作者: forfiles 时间: 2012-6-26 23:10
回复 11# asd821089612 - grep -vxFf 2.txt 1.txt >3.txt
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |