找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28362|回复: 8

[文本处理] 批处理怎样以文本前两列数据为准找出其他文件中前两列相同的行数据?

[复制链接]
发表于 2016-12-26 11:30:30 | 显示全部楼层 |阅读模式
根据一个文本的前两列数据 找到另一个文本前两列匹配的行数据 以文件a的数据找到文件b内前两行匹配的行数据  (b文件内列数不定)
发表于 2016-12-26 12:01:47 | 显示全部楼层
本帖最后由 flyinnet9 于 2016-12-26 12:04 编辑

for /f "tokens=1-2" %%a in (a.txt) do set #%%a%%b=1
for /f "tokens=1-2*" %%a in (b.txt) do if defined #%%a%%b echo.%%a %%b %%c
 楼主| 发表于 2016-12-26 17:52:16 | 显示全部楼层
回复 2# flyinnet9


    可以麻烦写详细一旦是哪个部分进行更改
发表于 2016-12-26 20:40:28 | 显示全部楼层
回复 3# newbat123


2楼的意思是这样:
  1. @echo off
  2. for /f "tokens=1-2" %%a in (a.txt) do set #%%a%%b=1
  3. (for /f "tokens=1-2*" %%a in (b.txt) do (
  4.     if defined #%%a%%b echo.%%a %%b %%c
  5. ))>result.log
复制代码
发表于 2016-12-27 08:04:57 | 显示全部楼层
本帖最后由 Nsqs 于 2016-12-27 09:00 编辑
  1. dim read(1),sc(1),m(1,1)
  2. set fso=CreateObject("Scripting.FileSystemObject")
  3. set regexp=new regexp
  4. file=array("a.txt","b.txt")
  5. with regexp
  6.     .Global=-1:.IgnoreCase=-1
  7.     .Pattern="(\d).*(\d).*(\d).*(\d)"
  8.     for list=0 to ubound(file)
  9.         read(list)=.Replace(fso.opentextfile(file(list)).readall,"$1$2$3$4")    '格式化文本剔除其他字符包括空格和特殊字符在内
  10.         sc(list)=split(read(list),vbcrlf)
  11.     next
  12.     .Pattern="((\d{2})\d{2})"
  13.     for list1=0 to ubound(sc(0))
  14.         m(0,0)=.replace(trim(sc(0)(list1)),"$2")
  15.         m(0,1)=.Replace(sc(0)(list1),"$1")
  16.         for list2=ubound(sc(1)) to 0 step -1
  17.             if not .test(sc(0)(list1)) then exit for    '文本行数不一或条件不符则忽略本次比较
  18.             m(1,0)=.replace(trim(sc(1)(list2)),"$2")
  19.             m(1,1)=.Replace(sc(1)(list2),"$1")
  20.             if m(0,0)=m(1,0) then result=result&trim(m(1,1))&vbcrlf    '满足条件提取b.txt数据
  21.         next
  22.     next
  23.     .Pattern="(\d)(\d)(\d)(\d)":result=.Replace(result,"$1 $2 $3 $4")
  24.     .Pattern="^(.*)\n$":if .test(result) then result=.Replace(result,"$1")    '恢复空格间距
  25. end with
  26. fso.createtextfile("new.txt").write result
  27. set fso=nothing:set regexp=nothing
复制代码
来个vbs版
 楼主| 发表于 2017-2-15 13:35:14 | 显示全部楼层
回复 4# GNU 不好意思 我想请问一下 就是 第一列是1/1/2015 第二列是12:58:11 这样的格式 是不是需要改一下呀
发表于 2017-2-15 15:38:00 | 显示全部楼层
  1. @echo off
  2. for /f "tokens=1,2 delims= " %%a in (a.txt) do (
  3. findstr "^[%%a].[%%b]" bb.txt
  4. )
  5. pause
复制代码
 楼主| 发表于 2017-2-22 10:49:50 | 显示全部楼层
回复 7# taofan712
不好意思 我试了一下 不可以呢
 楼主| 发表于 2017-2-22 11:04:03 | 显示全部楼层
回复 2# flyinnet9
不好意思 我想请问一下 就是 第一列是1/1/2015 第二列是12:58:11 这样的格式 是不是需要改一下呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 08:20 , Processed in 0.020793 second(s), 10 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表