Board logo

标题: [文本处理] [已解决]批处理使用第三方命令,如何实现2个文本相减? [打印本页]

作者: jzsgyml    时间: 2012-6-8 11:35     标题: [已解决]批处理使用第三方命令,如何实现2个文本相减?

本帖最后由 jzsgyml 于 2012-6-26 14:51 编辑

也就是要1.txt - 2.txt =?

用批处理一个个遍历,几万行就要几小时,几十万行几天时间了
例如1.txt
  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
复制代码
2.txt
  1. 1
  2. 2
复制代码
得到结果3.txt
  1. 3
  2. 4
  3. 5
复制代码
普通“findstr /c:"%%a" B.txt>nul||echo %%a>>C.txt”语句一行行判断效率太低,有几百万行呢,特来请教
作者: powerbat    时间: 2012-6-8 12:09

不用第三方工具也可以。
作者: jzsgyml    时间: 2012-6-8 12:44

回复 2# powerbat
  1. 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
  1. for /f %%a in (A.txt) do (
  2. findstr /c:"%%a" B.txt>nul||echo %%a>>C.txt
  3. )
复制代码
用findstr 就是一行行来,1万行就1万次,效率自然成倍的降低了,请问你有更效率的方法吗
作者: powerbat    时间: 2012-6-8 14:29

findstr的bug可以看这个
  1. set >env
  2. set | findstr /vg:env
  3. set | findstr /vxg:env
  4. set | findstr /vlg:env
  5. set | findstr /vrg:env
复制代码
你的数据有何特点?每行长度一般是多少?由什么字符组成?最好给出一段样本。
作者: jzsgyml    时间: 2012-6-8 14:45

回复 6# powerbat


    A.txt 都是单词表,B.txt是已经背诵的单词表,几十万,需要A-B。
  1. good  好
  2. best  好
  3. best  好
  4. 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

  1. @echo off
  2. fc 2.txt 1.txt>3.txt
  3. for /f "delims=\ skip=3 eol=*" %%i in (3.txt) do (@echo %%i>>4.txt)
  4. 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
  1. grep -vxFf 2.txt 1.txt >3.txt
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2