Board logo

标题: [文本处理] [已完成]批处理怎样找出A文件中每行内容在B文件中找不到的? [打印本页]

作者: gcbgczhang    时间: 2021-7-31 14:00     标题: [已完成]批处理怎样找出A文件中每行内容在B文件中找不到的?

本帖最后由 gcbgczhang 于 2021-7-31 22:44 编辑

各位老师好。
找出a.txt中在b.txt中不存在的行,输出到c.txt
两文件都有10万行以上,用什么方法最快呀,我搞的太慢了。
a.txt内容

211203196802142025
211203196612102081
211203198612202057
410401198411240027
...
b.txt内容
211203198612202057
211281201009062014
410401198411240027
211203196410162019
...
要得到c.txt,内容为
211203196802142025
211203196612102081
作者: Batcher    时间: 2021-7-31 16:18

回复 1# gcbgczhang


    请把你搞的发出来看一下
作者: idwma    时间: 2021-7-31 17:04

遍历一百亿次以上,这个每秒一千多万也要近二十分钟
@echo off
(for /f "delims=" %%a in (a.txt) do findstr "%%a" b.txt>nul||echo %%a)>c.txt
pause
作者: qixiaobin0715    时间: 2021-7-31 17:12

回复 1# gcbgczhang
如果文本像你提供的那样
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%b in (b.txt) do set #%%b=true
  4. (for /f %%a in (a.txt) do if not defined #%%a echo,%%a)>c.txt
  5. pause
复制代码

作者: gcbgczhang    时间: 2021-7-31 17:21

谢谢楼上的老师,不知道灰什么不能一个个回复。我现在有新的问题,就是用导出来的列表到库里匹配全信息输出来,天,太慢了。
@echo off
setlocal enabledelayedexpansion
(for /f %%a in (列表.txt) do (
    findstr /c:"%%a" 全信息.csv
))>nnccc.txt

列表内容就是这些身份证,而全信息其中一列包含身份证
作者: gcbgczhang    时间: 2021-7-31 17:45

老师,我用的这个,我自己搞的这个,文件小了感觉不出来,文件一大就抓狂。
@echo off
for /f "delims=*" %%i in (a.txt) do  findstr %%i b.txt || echo %%i>>c.txt
作者: gcbgczhang    时间: 2021-7-31 17:45

回复 3# idwma


    老师,你这个和我搞的一样啊…………。
作者: gcbgczhang    时间: 2021-7-31 17:55

回复 2# Batcher


    老师,我回复到楼下了,这个花时间弄完了,我用了findstr和for.
作者: idwma    时间: 2021-7-31 17:58

回复 7# gcbgczhang


   下次你可以用4楼那个方法,判断变量定义速度是真快
作者: Batcher    时间: 2021-7-31 18:38

回复 1# gcbgczhang


试试这样速度如何:
  1. findstr /v /l /g:b.txt a.txt > c.txt
复制代码

作者: gcbgczhang    时间: 2021-7-31 22:43

回复 10# Batcher


    2秒完成…….唉!!郁闷...我感觉也是用这个能比较,但看不明白参数没去实践.
作者: newswan    时间: 2021-7-31 23:51

文件比较命令 fc
  1. fc a.txt b.txt
复制代码





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