Board logo

标题: [文本处理] [已解决]批处理怎样对比文本? [打印本页]

作者: 小文    时间: 2014-12-20 17:36     标题: [已解决]批处理怎样对比文本?

本帖最后由 小文 于 2015-2-15 19:47 编辑

功能简述:以a文本中的行的内容去匹配b文本的行的内容,把匹配到的行追加为c文本。

功能详述:
1.设a文本里有多行文本,b文本里有更多的多行文本;

2.我们用逐行用a文本里的行的内容去匹配b文本里的内容;

3.如果b文本里有匹配a文本里行的内容,则输出b文本中所在内容的行到c文本中,否则继续用a文本的下一行去匹配b文本的内容。

结果演示:
a文本:
47一行一6行第7一行第*&
第二行b文本栋
384756 一五一一一


b文本:
4y6第47一行一6行第7一行第*&……&*一行第一行638456
第二行b文本栋**牤擤固顶地yrt65547
398467b文本第三行*(&……*&第三行
第丁下盯有婆罗门稼的836450 四第行
有e6y58o567看中一384756 一五一一一


c文本:
4y6第47一行一6行第7一行第*&……&*一行第一行638456
第二行b文本栋**牤擤固顶地yrt65547
有e6y58o567看中一384756 一五一一一
作者: Batcher    时间: 2014-12-20 17:48

  1. findstr /l /g:a.txt b.txt > c.txt
复制代码

作者: 小文    时间: 2014-12-20 17:52

回复 1# 小文
作者: 小文    时间: 2014-12-20 17:54

回复 2# Batcher


    谢谢你的帮助。就这么一小句,还真可以!dos果然是个好东西呀!
作者: 小文    时间: 2014-12-22 12:59

回复 2# Batcher


    为什么在这样的文本中没有用呢?对其使用命令:findstr /l /g:a.txt b.txt > c.txt
a.txt:
在计算机内部,
在计算机中,既可

b.txt:
在计算机内部,一切数据均以()形式存储选择B二进制
在计算机中,既可作为输入设备又可作为输出设备的是()选择B磁盘驱动器

c.txt:
(什么输出不了)
作者: Batcher    时间: 2014-12-22 13:40

回复 5# 小文


findstr是个不太靠谱的命令,如果你有grep的话可以试试:
  1. grep -Ff a.txt b.txt > c.txt
复制代码

作者: 小文    时间: 2014-12-22 14:39

回复 6# Batcher


    怎么个“不靠谱”呢,应该有他的道理。单行匹配是可以的,多行像之前的a、b文本也是可以的,就不知道后面的多行为什么就不可以了。那如果没有你后面说的那个命令是不是那个功能就实现不了了?如果前面的命令确实单行可用,那能不能用该命令循环使用在所需的文件?
作者: DAIC    时间: 2014-12-22 14:51

回复 7# 小文


    微软的命令不是开源的,你看不到道理,只能知道它很多时候不能按照自己希望的那种方式去工作。
作者: DAIC    时间: 2014-12-22 14:52

那如果没有你后面说的那个命令是不是那个功能就实现不了了?

哪个功能实现不了?我测试了一下没有发现问题
作者: DAIC    时间: 2014-12-22 14:53

如果前面的命令确实单行可用,那能不能用该命令循环使用在所需的文件?

这跟单行多行没有关系,你不知道 findstr 遇到哪个字符就会出问题。
作者: xxpinqz    时间: 2014-12-22 15:52

加个参数试试:
findstr /l /i /g:a.txt b.txt > c.txt




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