Board logo

标题: [文本处理] 对比两个文本的内容,把要对比的文本中的缺的,多的文本行列出来 [打印本页]

作者: kmustwxw    时间: 2015-1-8 12:01     标题: 对比两个文本的内容,把要对比的文本中的缺的,多的文本行列出来

问题描述:现有两个文本,文本1和文本2,文本1的内容是标准内容,用文本2的内容去和文本1对比,把文本2中的缺少的行和多余的行列出来放到文本“对比结果.txt”中。要说明的是,文本1的内容中,行有重复。可能会复杂点。
现举例说明如下:
文本1内容:
005001JA00001
005001JA00002
005001JA00002
005001JA00002
005001JA00003
005001JA00004
005001JA00006
005001JA00007
005001JA00008
005001JA00010
还有许多这种格式的行。
文本2的内容如下:
005001JA00001
005001JA00002
005001JA00002
005001JA00003
005001JA00004
005001JA00005
005001JA00006
005001JA00007
005001JA00008
005001JA00010
也还有好多这种格式的行,现在文本2中就缺少了:005001JA00002这一行,多了:005001JA00005这一行,把这两行的内容写到“对比结果.txt”中即可。不知道这样的要求,批处理代码能不能实现,先谢谢。
作者: DAIC    时间: 2015-1-8 13:14

  1. @echo off
  2. (for /f "tokens=2" %%i in ('diff.exe 1.txt 2.txt ^| findstr "^> ^<"') do (
  3.     echo,%%i
  4. ))>3.txt
复制代码
diff.exe可以在UnxUtils工具包里面找到
http://bbs.bathome.net/thread-1114-1-2.html
作者: kmustwxw    时间: 2015-1-8 14:49

本帖最后由 kmustwxw 于 2015-1-8 15:06 编辑

回复 2# DAIC 看到这段代码不知道说什么了,这应该是个很难的问题,没有想到,我弄了半天没能解决掉,你就这几行就完美的解决了,工具包里的这些工具的各自的功能,怎么用,没有说明吗?谢谢,太感谢 了。
作者: DAIC    时间: 2015-1-8 15:50

回复 3# kmustwxw


那个工具包里面是常见Linux命令的Windows版本,如果熟悉Linux命令的话应该很容易上手。
如果要查看某个命令的帮助信息,可以这样:
  1. diff --help
复制代码

作者: tmplinshi    时间: 2015-1-8 16:04

本帖最后由 tmplinshi 于 2015-1-8 16:06 编辑

可以用 WinMerge



发现 WinMerge 生成的“补丁”跟 diff.exe 的结果是一样的:




作者: kmustwxw    时间: 2015-1-26 13:16

回复 4# DAIC 你好,DAIC,我想把两个文本的相同内容输出来,应该如何修改,把大于和小于改成等号吗??
作者: DAIC    时间: 2015-1-26 13:48

把两个文本的相同内容输出来
  1. @echo off
  2. findstr /x /g:1.txt 2.txt >3.txt
复制代码

作者: DAIC    时间: 2015-1-26 13:49

回复 6# kmustwxw


    不是。diff命令的作用就是查找不同的行。查找相同的行用findstr命令就行了。




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