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

[文本处理] 批处理如何查找出A文本各行与B文本每一行相同的数字

[复制链接]
发表于 2012-5-17 16:35:53 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-7-6 11:43 编辑


a.txt内容为:
01 03 04 05 07 08 09 13
11 13 14 15 16 17 19 20
22 23 25 26 27 30 34 38

b.txt为:
01 02 03 04 05 06 13 14 20 27 30 34
01 02 03 04 05 07 13 14 20 27 32 38
05 06 08 11 15 18 19 21 22 29 36 38
05 06 08 11 15 18 19 21 24 29 38 42

两份文本内容均为升续
查找a.txt行的数字与b.txt行中有哪些是相同的,处理出来保存为3.txt

如:
a.txt第一行是 01 03 04 05 07 08 09 13
b.txt为:
01 02 03 04 05 06 13 14 20 27 30 34
01 02 03 04 05 07 13 14 20 27 32 38
05 06 08 11 15 18 19 21 22 29 36 38
05 06 08 11 15 18 19 21 24 29 38 42
那么b.txt行中与之相同的就是:
01 03 04 05 13
01 02 03 04 05 07 13
05 08
05 08

a.txt第二行是 11 13 14 15 16 17 19 20
b.txt为:
01 02 03 04 05 06 13 14 20 27 30 34
01 02 03 04 05 07 13 14 20 27 32 38
05 06 08 11 15 18 19 21 22 29 36 38
05 06 08 11 15 18 19 21 24 29 38 42
那么b.txt行中与之相同的就是:
13 14 20
13 14 20
11 15 19
11 15 19

a.txt第三行是 22 23 25 26 27 30 34 38
b.txt为:
01 02 03 04 05 06 13 14 20 27 30 34
01 02 03 04 05 07 13 14 20 27 32 38
05 06 08 11 15 18 19 21 22 29 36 38
05 06 08 11 15 18 19 21 24 29 38 42
那么b.txt行中与之相同的就是:
27 30 34
27 38
22 38
38

-------------------------------------------

a.txt:
01 03 04 05 07 08 09 13
11 13 14 15 16 17 19 20
22 23 25 26 27 30 34 38

b.txt:
01 02 03 04 05 06 13 14 20 27 30 34
01 02 03 04 05 07 13 14 20 27 32 38
05 06 08 11 15 18 19 21 22 29 36 38
05 06 08 11 15 18 19 21 24 29 38 42

所以a.txt与b.txt处理后得出的相同数字就是:
01 03 04 05 13
01 02 03 04 05 07 13
05 08
05 08
13 14 20
13 14 20
11 15 19
11 15 19
27 30 34
27 38
22 38
38

保存为3.txt
发表于 2012-5-17 16:56:22 | 显示全部楼层
两个文件的列数是否固定?
 楼主| 发表于 2012-5-17 18:33:02 | 显示全部楼层
回复 2# gawk


    你好,两个文件的列数为固定
发表于 2012-5-17 19:18:25 | 显示全部楼层
  1. @echo off
  2. (for /f "delims=" %%a in (a.txt) do (
  3.   setlocal enabledelayedexpansion
  4.   for %%b in (%%a) do (
  5.     set/a n+=1
  6.     set .!n!=%%b
  7.   )
  8.   for /f "delims=" %%c in (b.txt) do (
  9.     for %%d in (%%c) do (
  10.       for /l %%e in (1 1 !n!) do (
  11.         if "%%d"=="!.%%e!" set "str=!str! %%d"
  12.       )
  13.     )
  14.     echo !str:~1!&set str=
  15.   )
  16.   endlocal
  17. ))>3.txt
复制代码
发表于 2012-5-17 19:23:41 | 显示全部楼层
  1. @set @n=0//& cscript.exe -e:jscript "%~f0"& pause& exit/b
  2. a = 'a.txt';
  3. b = 'b.txt';
  4. fso = new ActiveXObject('Scripting.FileSystemObject');
  5. ts = fso.OpenTextFile(a);
  6. txt = fso.OpenTextFile(b).ReadAll();
  7. s = '';
  8. while(!ts.AtEndOfStream) {
  9.     ln = ts.ReadLine();
  10.     re = new RegExp('\\b(?:' + ln.replace(/ +/g,'|') + '|\r\n)\\b','g');
  11.     s += txt.match(re).join(' ') + '\r\n';
  12. }
  13. s = s.replace(/^ | $/gm,'').replace(/(?:\r\n){2,}/g,'\r\n');
  14. fso.OpenTextFile('c.txt', 2, true).Write(s);
复制代码
 楼主| 发表于 2012-5-17 19:55:21 | 显示全部楼层
谢谢apang及powerbat 两位大哥提供的代码,特别是apang大哥一而再的帮助。
发表于 2012-5-19 10:12:24 | 显示全部楼层
回复 4# apang

兄弟,你写的代码很多时候都很让人费解啊

比如这句    set .!n!=%%b

在!n!之前加一个小数点,是什么作用呢?
发表于 2012-5-19 16:38:29 | 显示全部楼层
回复 7# poter

怎么会费解?你把小数点当成一般的字母看待就不会这么认为了。就像set A1=%%b,set A2=%%b等等;其中!n!为设置的变量值1,2,3,4。。。
发表于 2012-5-20 00:36:24 | 显示全部楼层
本帖最后由 lvsehuaxue 于 2012-5-20 00:37 编辑

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do (
  3.    for %%a in (%%i) do (      
  4.       for /f "delims=" %%b in (b.txt) do (
  5.           set /a n+=1
  6.           for %%c in (%%b) do (
  7.               if %%a equ %%c call set "str!n!=%%str!n!%% %%a"
  8.           )                  
  9.       )
  10.       set n=      
  11.     )
  12.    for /l %%i in (1 1 4) do echo !str%%i!>>3.txt&set str%%i=
  13. )
复制代码
发表于 2012-5-20 01:49:38 | 显示全部楼层
少点变量啦

  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=" %%a in (a.txt) do (
  3.      for /f "delims=" %%b in (b.txt) do (
  4.          for %%c in (%%a) do for %%d in (%%b) do if %%c equ %%d set str=!str! %%c
  5.          echo!str!&set str=
  6.      )
  7. ))>3.txt
  8. PAUSE
复制代码
发表于 2012-5-20 07:44:35 | 显示全部楼层
回复 8# apang

哦,我懂了,原来是这个意思了。谢谢老哥
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-21 06:35 , Processed in 0.032088 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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