Board logo

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

作者: newbat123    时间: 2016-12-26 11:30     标题: 批处理怎样以文本前两列数据为准找出其他文件中前两列相同的行数据?

根据一个文本的前两列数据 找到另一个文本前两列匹配的行数据 以文件a的数据找到文件b内前两行匹配的行数据  (b文件内列数不定)
作者: flyinnet9    时间: 2016-12-26 12:01

本帖最后由 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
作者: newbat123    时间: 2016-12-26 17:52

回复 2# flyinnet9


    可以麻烦写详细一旦是哪个部分进行更改
作者: GNU    时间: 2016-12-26 20:40

回复 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
复制代码

作者: Nsqs    时间: 2016-12-27 08:04

本帖最后由 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版
作者: newbat123    时间: 2017-2-15 13:35

回复 4# GNU 不好意思 我想请问一下 就是 第一列是1/1/2015 第二列是12:58:11 这样的格式 是不是需要改一下呀
作者: taofan712    时间: 2017-2-15 15:38

  1. @echo off
  2. for /f "tokens=1,2 delims= " %%a in (a.txt) do (
  3. findstr "^[%%a].[%%b]" bb.txt
  4. )
  5. pause
复制代码

作者: newbat123    时间: 2017-2-22 10:49

回复 7# taofan712
不好意思 我试了一下 不可以呢
作者: newbat123    时间: 2017-2-22 11:04

回复 2# flyinnet9
不好意思 我想请问一下 就是 第一列是1/1/2015 第二列是12:58:11 这样的格式 是不是需要改一下呀




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