[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理使用第三方命令,如何实现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”语句一行行判断效率太低,有几百万行呢,特来请教
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 11# asd821089612
  1. grep -vxFf 2.txt 1.txt >3.txt
复制代码
1

评分人数

TOP

能不能用cmd里的"fc"这个命令
再用for命令截取里面的不同处就可以了
asd821089612 发表于 2012-6-26 07:33


谢谢,我标题好像改出歧义了,我的意思是cmd太慢,有没有第三方好些的。你说的fc确实是一个方法,逻辑上都比find一行一行对比强,谢谢

TOP

  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

虽然是一种思路,但是为测试过楼主所说的几万行的大文件,不知道速度怎么样

TOP

能不能用cmd里的"fc"这个命令
再用for命令截取里面的不同处就可以了
nothing's gonna change
and I've never changed

TOP

如果再给出其它的命令也许仅仅是换了一下汤而以
1:如果同时打开2个以上的大文件,你的缓存能受得了么?(我从来没打开过1G以上的文件)
2:要是从P入手的话可能只是CMD内置的命令了
以上仅是个人想法
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

请教一下不使用第三方的原因是?

TOP

回复 6# powerbat


    A.txt 都是单词表,B.txt是已经背诵的单词表,几十万,需要A-B。
  1. good  好
  2. best  好
  3. best  好
  4. good  好
复制代码

TOP

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
复制代码
你的数据有何特点?每行长度一般是多少?由什么字符组成?最好给出一段样本。

TOP

原来相减是这个意思?
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万次,效率自然成倍的降低了,请问你有更效率的方法吗

TOP

原来相减是这个意思?
findstr还有bug。操作系统自带命令多的是。

TOP

回复 2# powerbat
  1. findstr/vg:a.txt b.txt>c.txt
复制代码
不用第三方慢得哭

TOP

不用第三方工具也可以。

TOP

返回列表