标题: [文本处理] 批处理如何查找出A文本各行与B文本每一行相同的数字 [打印本页]
作者: qzwifi 时间: 2012-5-17 16:35 标题: 批处理如何查找出A文本各行与B文本每一行相同的数字
本帖最后由 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
作者: gawk 时间: 2012-5-17 16:56
两个文件的列数是否固定?
作者: qzwifi 时间: 2012-5-17 18:33
回复 2# gawk
你好,两个文件的列数为固定
作者: apang 时间: 2012-5-17 19:18
- @echo off
- (for /f "delims=" %%a in (a.txt) do (
- setlocal enabledelayedexpansion
- for %%b in (%%a) do (
- set/a n+=1
- set .!n!=%%b
- )
- for /f "delims=" %%c in (b.txt) do (
- for %%d in (%%c) do (
- for /l %%e in (1 1 !n!) do (
- if "%%d"=="!.%%e!" set "str=!str! %%d"
- )
- )
- echo !str:~1!&set str=
- )
- endlocal
- ))>3.txt
复制代码
作者: powerbat 时间: 2012-5-17 19:23
- @set @n=0//& cscript.exe -e:jscript "%~f0"& pause& exit/b
- a = 'a.txt';
- b = 'b.txt';
- fso = new ActiveXObject('Scripting.FileSystemObject');
- ts = fso.OpenTextFile(a);
- txt = fso.OpenTextFile(b).ReadAll();
- s = '';
- while(!ts.AtEndOfStream) {
- ln = ts.ReadLine();
- re = new RegExp('\\b(?:' + ln.replace(/ +/g,'|') + '|\r\n)\\b','g');
- s += txt.match(re).join(' ') + '\r\n';
- }
- s = s.replace(/^ | $/gm,'').replace(/(?:\r\n){2,}/g,'\r\n');
- fso.OpenTextFile('c.txt', 2, true).Write(s);
复制代码
作者: qzwifi 时间: 2012-5-17 19:55
谢谢apang及powerbat 两位大哥提供的代码,特别是apang大哥一而再的帮助。
作者: poter 时间: 2012-5-19 10:12
回复 4# apang
兄弟,你写的代码很多时候都很让人费解啊
比如这句 set .!n!=%%b
在!n!之前加一个小数点,是什么作用呢?
作者: apang 时间: 2012-5-19 16:38
回复 7# poter
怎么会费解?你把小数点当成一般的字母看待就不会这么认为了。就像set A1=%%b,set A2=%%b等等;其中!n!为设置的变量值1,2,3,4。。。
作者: lvsehuaxue 时间: 2012-5-20 00:36
本帖最后由 lvsehuaxue 于 2012-5-20 00:37 编辑
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%i in (a.txt) do (
- for %%a in (%%i) do (
- for /f "delims=" %%b in (b.txt) do (
- set /a n+=1
- for %%c in (%%b) do (
- if %%a equ %%c call set "str!n!=%%str!n!%% %%a"
- )
- )
- set n=
- )
- for /l %%i in (1 1 4) do echo !str%%i!>>3.txt&set str%%i=
- )
复制代码
作者: terse 时间: 2012-5-20 01:49
少点变量啦- @echo off&setlocal enabledelayedexpansion
- (for /f "delims=" %%a in (a.txt) do (
- for /f "delims=" %%b in (b.txt) do (
- for %%c in (%%a) do for %%d in (%%b) do if %%c equ %%d set str=!str! %%c
- echo!str!&set str=
- )
- ))>3.txt
- PAUSE
复制代码
作者: poter 时间: 2012-5-20 07:44
回复 8# apang
哦,我懂了,原来是这个意思了。谢谢老哥
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |