Board logo

标题: [文本处理] 批处理如何查找出两个txt文本第一列相同的行和不同的行 [打印本页]

作者: hyqzh    时间: 2014-3-6 09:06     标题: 批处理如何查找出两个txt文本第一列相同的行和不同的行

本帖最后由 pcl_test 于 2016-7-19 07:55 编辑

想法  在新帐号里每一行帐号 从 旧帐号 对比   
如果有重复的,写入重复文档中(只写入新帐号的对应行)
如果没有重复的,写入 没有重复文档中(只写入新帐号的对应行)



新帐号.txt   内容如下  红色的为重复的   黑色的没有重复
55465465-1231256-555555555
554545587-123456-55555
3256565656-123456-----44444444

5878899999-123456---666666
665898977962-123456-55487

旧帐号.txt   内容如下
55465465-dsafdsafdsa
554545587-dsfdsa--554
3256565656-fewretety-999
56456556656-edsaweqfe
54564775525-ewqfewewq

我要的最终结果是得到两个文件 但是 旧帐号跟新帐号密码有可能不一样,还有可能,是多列的 所以我只针对帐号对比!
分别为
重复帐号.txt   内容如下
55465465-1231256-555555555
554545587-123456-55555
3256565656-123456-----44444444


没有重复帐号.txt 内容如下
5878899999-123456---666666
665898977962-123456-55487

bat  文件内容如下
  1. for /f "delims=- tokens=1 " %%i in (新帐号.txt)do (
  2.      set nzh=%%i
  3.      for /f "delims=- tokens=1 " %%i in (旧帐号.txt)do (
  4.           set jzh=%%i
  5.           if /i %nzh%=="%jzh%" (
  6.                findstr /r  /b %nzh% 新帐号.txt>重复帐号.txt
  7.                goto run
  8.           )
  9.      )
  10.      findstr  /r /b %nzh% 新帐号.txt>没有重复帐号.txt
  11.      :run
  12. )
复制代码

作者: ivor    时间: 2014-3-6 10:13

如果按你的代码来说,应该启用延缓环境变量
作者: DAIC    时间: 2014-3-6 10:53

  1. @echo off
  2. >重复帐号.txt type nul
  3. >没有重复帐号.txt type nul
  4. for /f "tokens=1-2 delims=-" %%i in (新帐号.txt)do (
  5.     findstr /b "%%i-" 旧帐号.txt >nul && >>重复帐号.txt echo %%i-%%j || >>没有重复帐号.txt echo %%i-%%j
  6. )
复制代码

作者: hyqzh    时间: 2014-3-6 13:33

本帖最后由 hyqzh 于 2014-3-6 13:49 编辑
DAIC 发表于 2014-3-6 10:53



    您好,谢谢,按你的脚本是OK的,但是我忘了说,

旧帐号跟新帐号密码有可能不一样,还有可能,是多列的 所以我只针对帐号对比!

所以麻烦再帮我一下,我已改了内容,请帮我看看,非常感谢!
作者: terse    时间: 2014-3-6 14:08

这样行不
  1. @echo off
  2. (for /f "delims=-" %%i in (b.txt)do echo %%i-)>"%temp%\$"
  3. >重复帐号.txt findstr /ibg:"%temp%\$" a.txt
  4. >没有重复帐号.txt findstr /ibvg:"%temp%\$" a.txt
  5. del "%temp%\$"
  6. pause
复制代码

作者: hyqzh    时间: 2014-3-6 14:15

这样行不
terse 发表于 2014-3-6 14:08



   
@echo off
(for /f "delims=-" %%i in (旧帐号.txt)do echo %%i-)>"%temp%\$"
>重复帐号.txt findstr /ibg:"%temp%\$" 新帐号.txt
>没有重复帐号.txt findstr /ibvg:"%temp%\$" 新帐号.txt
del "%temp%\$"
pause


OK哦,谢谢!
作者: DAIC    时间: 2014-3-6 14:15

回复 4# hyqzh
  1. @echo off
  2. >重复帐号.txt type nul
  3. >没有重复帐号.txt type nul
  4. for /f "tokens=1* delims=-" %%i in (新帐号.txt)do (
  5.     findstr /b "%%i-" 旧帐号.txt >nul && >>重复帐号.txt echo %%i-%%j || >>没有重复帐号.txt echo %%i-%%j
  6. )
复制代码

作者: hyqzh    时间: 2014-3-6 14:23

本帖最后由 hyqzh 于 2014-3-6 14:28 编辑
回复  hyqzh
DAIC 发表于 2014-3-6 14:15



    OK,谢谢,不过楼上的那位,速度快好多,新文件2658行   旧文件35700多行

楼上的只要5秒左右

你的要25秒左右。

不过你的我看得懂,也明白什么意思, 楼上的,只知道好用,但是我看不懂

你们都是高手,谢谢您们,帮我解决一大难题!
作者: DAIC    时间: 2014-3-6 15:22

回复 8# hyqzh


5楼代码是这样工作的:
先把 旧帐号.txt 里面的第一列放到一个临时文件
然后用这个临时文件和 新帐号.txt 做对比查找
作者: hyqzh    时间: 2014-3-6 15:29

回复  hyqzh


5楼代码是这样工作的:
先把 旧帐号.txt 里面的第一列放到一个临时文件
然后用这个临时 ...
DAIC 发表于 2014-3-6 15:22



    完全明白了,谢谢!




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