Board logo

标题: [文本处理] [已解决]批处理比对两个文本文件,删除相同的部分,保留不同的部分。 [打印本页]

作者: thp2008    时间: 2021-3-29 21:54     标题: [已解决]批处理比对两个文本文件,删除相同的部分,保留不同的部分。

本帖最后由 thp2008 于 2021-3-30 10:11 编辑

源文件
1、AAA.txt
https://www.xigua.com/view_video.php?view=m604a630edd040
https://www.xigua.com/view_video.php?view=m60261926f38a5
https://www.xigua.com/view_video.php?view=m5fdcb7249a004
https://www.xigua.com/view_video.php?view=m5e80d9ed27871
https://www.xigua.com/view_video.php?view=m5f9c775cb3dc1
https://www.xigua.com/view_video.php?view=m6057900f86d5e
https://www.xigua.com/view_video.php?view=m5f7f16b208e42
https://www.xigua.com/view_video.php?view=m60271ee9c3642
https://www.xigua.com/view_video.php?view=m605cd58a890b3
https://www.xigua.com/view_video.php?view=m60030a961e34a
https://www.xigua.com/view_video.php?view=m604e3a822dd61
https://www.xigua.com/view_video.php?view=m5f70cc4b8f31b
https://www.xigua.com/view_video.php?view=m6055ce153a579
https://www.xigua.com/view_video.php?view=m6031dad48532b
https://www.xigua.com/view_video.php?view=m5e29b1373d0f1
https://www.xigua.com/view_video.php?view=m6044dd19361f6
........................
此处省略N行

2、需要对比的文件BBB.txt
https://www.xigua.com/view_video.php?view=m604a630edd040
https://www.xigua.com/view_video.php?view=m60299e235b243
https://www.xigua.com/view_video.php?view=m60417e1fd4156
https://www.xigua.com/view_video.php?view=m5f7f16b208e42
https://www.xigua.com/view_video.php?view=m60383bd87b094
https://www.xigua.com/view_video.php?view=m6038f35c2a72e
https://www.xigua.com/view_video.php?view=m5fdcb7249a004
https://www.xigua.com/view_video.php?view=m6024535c84794
..........................
此处省略N行

我需要将BBB.txt跟源文件AAA.txt的内容进行比较,整行进行比较,忽略大小写。

要求:
1、如果BBB.txt中的内容,有跟源文件相同的部分,请将相同的行显示出来,不要显示AAA.txt,只要显示BBB.txt,就好了。暂停一下,等我确认一下。然后从BBB.TXT中删除跟源文件AAA.txt中相同的行。(不要对源文件AAA.txt有任何操作,源文件AAA.txt只用于比对源)

2、上一步完成后,检查一下BBB.txt中是否有空行,将空行删除,然后BBB.txt和AAA.txt的全部行进行合并,合并后的新文件为ccc.txt.(不要对源文件AAA.txt有任何操作,源文件AAA.txt只用于合并源)

如果第三方命令行工具,更好用,更高效的话,也可以使用第三方命令行。如果没有,使用批处理也可以,PowerShell也行(如果是PowerShell,请写成CMD格式)
万分感谢!
作者: Batcher    时间: 2021-3-30 09:57

回复 1# thp2008


测试代码之前请先把文本文件做好备份
  1. @echo off
  2. echo 跟源文件相同的部分:
  3. findstr /x /g:"BBB.txt" "AAA.txt" > "%temp%\BBB.dup"
  4. type "%temp%\BBB.dup"
  5. pause
  6. echo 删除跟源文件相同的部分:
  7. findstr /v /x /g:"%temp%\BBB.dup" "BBB.txt" > "%temp%\BBB.tmp"
  8. type "%temp%\BBB.tmp"
  9. pause
  10. echo 删除空行:
  11. findstr "http" "%temp%\BBB.tmp" > "BBB.txt"
  12. type "BBB.txt"
  13. pause
  14. echo 追加合并到源文件:
  15. type "BBB.txt" >> "AAA.txt"
  16. pause
复制代码
请参考Q-04和Q-05把bat文件和txt文件都保存为ANSI编码:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ
作者: thp2008    时间: 2021-3-30 10:11

回复  thp2008


测试代码之前请先把文本文件做好备份请参考Q-04和Q-05把bat文件和txt文件都保存为ANSI ...
Batcher 发表于 2021-3-30 09:57



    感谢!感谢!没有问题。
作者: thp2008    时间: 2021-3-30 13:34

回复 2# Batcher

开始没有仔细测试,刚刚仔细测试了一下,代码,发现可以比对出来,但是不能删除重复部分,仔细检查了一下,发现是第9行,应该修改一下,才能删除。
如下:
  1. type "%temp%\BBB.tmp">BBB.txt
复制代码
写出来一下,免得其它朋友也有需要,遇到同样问题。

感谢大佬!
作者: thp2008    时间: 2021-3-30 13:41

本帖最后由 thp2008 于 2021-3-30 13:46 编辑

回复 2# Batcher


    不好意思,我测试时,还发现一个问题,就是,如果有重复的,就不会出错,批处理正常。
但是如果两个文件,根本就没有重复的行,这样写,就会清空BBB.txt,还麻烦大佬帮我修改一下。
其实,我也研究出来了,问题,其实出在下面这个地方
  1. findstr /v /x /g:"%temp%\BBB.dup" "BBB.txt" > "%temp%\BBB.tmp"
  2. type "%temp%\BBB.tmp">BBB.txt
复制代码
但我不知道,如何修改,来规避没有重复的情况。

我的思路是,应该在前面,先加上一个判断,如何没有发现重复,就直接跳过。如果发现有重复的行,就执行上述去除的指令。但不知道如何写出来。
作者: Batcher    时间: 2021-3-30 14:21

回复 5# thp2008
  1. @echo off
  2. echo 跟源文件相同的部分:
  3. findstr /x /g:"BBB.txt" "AAA.txt" > "%temp%\BBB.dup"
  4. type "%temp%\BBB.dup"
  5. pause
  6. echo 删除跟源文件相同的部分:
  7. findstr /v /x /g:"%temp%\BBB.dup" "BBB.txt" > "%temp%\BBB.tmp1"
  8. findstr "http" "%temp%\BBB.tmp1" >nul
  9. if not errorlevel 1 (
  10.     type "%temp%\BBB.tmp1" > "BBB.txt"
  11. )
  12. pause
  13. echo 删除空行:
  14. findstr "http" "BBB.txt" > "%temp%\BBB.tmp2"
  15. type "%temp%\BBB.tmp2" > "BBB.txt"
  16. type "BBB.txt"
  17. pause
  18. echo 追加合并到源文件:
  19. type "BBB.txt" >> "AAA.txt"
  20. pause
复制代码

作者: thp2008    时间: 2021-3-30 15:46

回复 6# Batcher


    感谢,大佬,反复测试了,现在没有问题了。
作者: thp2008    时间: 2021-3-30 16:08

使用细节:
1、对于两个文本文件,一定要在文本文件的最后一行,打一个回车,不然合并后,A文件的最后一行和B文件的第一行会连接到一起。
2、这个批处理,如果对这两个文件,进行第二次比对,可以比对出来,却不能删除了。会再次合并到A文件。如果重复这个步骤,会发生重复这样的合并。不明白为什么这样。但是第一次是可以删除的。
作者: thp2008    时间: 2021-3-30 16:10

难道第二次,是因为,全部都重复,如果删除文件为空,所以没有执行吗
作者: thp2008    时间: 2021-3-30 16:19

测试出来,真是这个原因,如果B文件完全重复的,就会出现,不能删除,只要一条不重复,都是可以删除成功的,不是不能重复比对,明白了。




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