标题: [文本处理] 批处理如何查找出两个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 文件内容如下- for /f "delims=- tokens=1 " %%i in (新帐号.txt)do (
- set nzh=%%i
- for /f "delims=- tokens=1 " %%i in (旧帐号.txt)do (
- set jzh=%%i
- if /i %nzh%=="%jzh%" (
- findstr /r /b %nzh% 新帐号.txt>重复帐号.txt
- goto run
-
- )
- )
- findstr /r /b %nzh% 新帐号.txt>没有重复帐号.txt
- :run
- )
复制代码
作者: ivor 时间: 2014-3-6 10:13
如果按你的代码来说,应该启用延缓环境变量
作者: DAIC 时间: 2014-3-6 10:53
- @echo off
- >重复帐号.txt type nul
- >没有重复帐号.txt type nul
- for /f "tokens=1-2 delims=-" %%i in (新帐号.txt)do (
- findstr /b "%%i-" 旧帐号.txt >nul && >>重复帐号.txt echo %%i-%%j || >>没有重复帐号.txt echo %%i-%%j
- )
复制代码
作者: 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
这样行不- @echo off
- (for /f "delims=-" %%i in (b.txt)do echo %%i-)>"%temp%\$"
- >重复帐号.txt findstr /ibg:"%temp%\$" a.txt
- >没有重复帐号.txt findstr /ibvg:"%temp%\$" a.txt
- del "%temp%\$"
- 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 - @echo off
- >重复帐号.txt type nul
- >没有重复帐号.txt type nul
- for /f "tokens=1* delims=-" %%i in (新帐号.txt)do (
- findstr /b "%%i-" 旧帐号.txt >nul && >>重复帐号.txt echo %%i-%%j || >>没有重复帐号.txt echo %%i-%%j
- )
复制代码
作者: 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://bathome.net./) |
Powered by Discuz! 7.2 |