[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理怎样实现两份文本查找同一行内相同数?

[求助] 我有两份数据需要处理,处理要求有点特殊!大家来看一下。。。
两份数据 假设一份放在1.txt 另一份放在2.txt中
例:
1.txt 里面数字 01 02 03 04 05 06 07 08 09      1.txt总共是一万行  1.txt一行是9个两位数的数字
2.txt 里面数字 01 03 04 07 09                          2.txt总共是三千行  2.txt一行是5个两位数的数字
两份数据每一行的内容数字都不同,要处理的就是如何把1.txt一万行里面不管哪一行只要有包含了2.txt里面的任意一行五个数字就把1.txt的这行保存在3.txt
注:2.txt这5个数字可以以任意形式出现在1.txt一万行内的随便哪一行里面,只要1.txt行里面有包含了2.txt这五个数字就要把1.txt的这一行保存在3.txt

望高手指教一下。。。

用EXCEL来做要一行一行的做,,,,3000多行,实在是有点难度.以后也经常要使用到,这样一行一行做也不是办法,请大家帮个忙.谢谢.

本帖最后由 yangfengoo 于 2011-10-28 09:30 编辑
  1. @echo off
  2. for /f "tokens=1,2,3,4,5" %%1 in (2.txt) do (
  3. findstr %%1 1.txt|findstr %%2|findstr %%3|findstr %%4|findstr %%5
  4. )>3.txt
复制代码

TOP

  1. @echo off
  2. for /f "tokens=1,2,3,4,5" %%1 in (2.txt) do (
  3. find "%%1" 1.txt|find "%%2"|find "%%3"|find "%%4"|find "%%5"
  4. )>3.txt
  5. pause
复制代码
用find 居然还慢些

TOP

本帖最后由 qzwifi 于 2011-10-28 14:22 编辑

楼上的代码只能处理出2.txt里面单一行的数字

比如2.txt总共有三千行来说
01 03 04 07 09
08 09 23 39 50
06 14 22 31 41
05 07 12 16 18
03 11 13 14 21
10 14 27 38 53
16 24 30 33 39
12 19 21 24 25
20 33 37 40 48
................................

楼上的代码只能处理出其中的一行如:01 03 04 07 09而不能处理出余下的行!   有能全部处理出来的代码吗?谢谢。。。

TOP

盼望高手出来指点一二。。。

TOP

:):):):)

TOP

你确定只能处理一行?

TOP

把1.txt贴出10行看看,yangfengoo 代码测试没问题啊

TOP

例:
1.txt为以下
04 12 13 14 20 23 30 39 44
09 17 19 32 50 53 57 60 66
06 11 14 16 20 22 31 37 41
04 09 20 24 25 33 37 40 48
16 20 24 30 21 33 29 43 55
12 17 19 21 23 24 25 27 32
10 12 13 14 20 27 29 38 53
01 03 04 06 07 09 30 33 37
01 06 08 09 23 29 39 46 50
04 10 13 27 29 30 38 49 53
03 11 13 14 20 21 26 30 33
04 05 06 07 12 14 16 18 27
01 03 04 05 07 09 10 13 15
03 04 05 07 11 12 16 18 29
07 10 12 14 22 27 38 44 53
01 09 16 24 29 30 33 49 50
02 20 21 33 37 38 39 40 48

2.txt为以下
01 03 04 07 09
08 09 23 39 50
06 14 22 31 41
05 07 12 16 18
03 11 13 14 21
10 14 27 38 53
16 24 30 33 39
12 19 21 24 25
20 33 37 40 48

TOP

看来两个文本的 1~N 列都是从小到大排序好了的,那就可以直接 findstr 了
  1. @findstr /g:2.txt 1.txt>3.txt
复制代码

TOP

楼上直接批相同是不行的,虽然大小是排好的了但是2.txt里面五个数是可以任意出现在1.txt里面的任何行

比如 2.txt里面的一行:01 03 04 07 09
在1.txt 01 03 04 06 07 09 30 33 37 这行里面就包含了这五个但是直接批相同是肯定批不出来的。因为中间隔了一个06

TOP

@echo off
for /f "tokens=1,2,3,4,5" %%1 in (2.txt) do (
find "%%1" 1.txt|find "%%2"|find "%%3"|find "%%4"|find "%%5"
) >>3.txt
pause

TOP

回复 12# andersen12


findstr命令可以同时查找多个关键字
  1. @echo off
  2. (for /f "tokens=1-5" %%a in (2.txt) do (
  3.     findstr "%%a %%b %%c %%d %%e" 1.txt
  4. ))>3.txt
复制代码

TOP

返回列表