标题: [文本处理] 【已解决】BAT批处理怎样比较文件输出具有相同元素个数的行? [打印本页]
作者: battab 时间: 2013-12-27 18:09 标题: 【已解决】BAT批处理怎样比较文件输出具有相同元素个数的行?
本帖最后由 battab 于 2013-12-28 09:09 编辑
有两个文件:1.txt 2.txt
1.txt 的内容是:
a b c d e f g
h i j k l m n
a e k m o r
2.txt的内容是:
a b i j k c g
要求拿2.txt与1.txt比较,1.txt中可能有很多行.
输出内容保存在3.txt为: "4个元素相同的行:
a b c d e f g
3个元素相同的行:
h i j k l m n
2个元素相同的行:
a e k m o r"
批处理可以做到吗?求教!
作者: apang 时间: 2013-12-27 19:13
本帖最后由 apang 于 2013-12-27 19:16 编辑
- @echo off & setlocal enabledelayedexpansion
- %1(for /f "tokens=*delims=0" %%a in ('"%~0" :^|sort /r')do echo,%%a)>3.txt &pause&exit /b
- set /p s=<2.txt
- for %%a in (%s%) do set ".%%a=1"
- for /f "delims=" %%a in (1.txt) do (
- set "n="
- for %%b in (%%a) do if defined .%%b set /a n+=1
- if defined n set n=000!n!&echo,!n:~-4!个元素相同的行:%%a
- )
复制代码
作者: battab 时间: 2013-12-27 22:31
回复 2# apang
效果达到,太帅了。
本人也就一菜鸟,很多地方看不懂,特别是几个for循环里的东东,更是看得一头雾水,apang大大能不能注释解说一下。
作者: apang 时间: 2013-12-28 10:53
回复 3# battab
简单注释下,有些语句只能意会,不能言传。- @echo off & setlocal enabledelayedexpansion
- %1(for /f "tokens=*delims=0" %%a in ('"%~0" :^|sort /r')do echo,%%a)>3.txt &pause&exit /b
- Rem 开启新进程运行批处理自身,把":"作为参数传递给%1,新进程不会运行这一行。
- Rem 作用是删除行首重复0,并逆序输出到3.txt
- set /p s=<2.txt
- Rem 将2.txt第一行赋值给变量s
- for %%a in (%s%) do set ".%%a=1"
- Rem 假设s值为a b c d,就将变量.a .b .c .d分别赋值为1
- for /f "delims=" %%a in (1.txt) do (
- Rem 循环读取1.txt每一行
- set "n="
- Rem 赋值变量n为空值
- for %%b in (%%a) do if defined .%%b set /a n+=1
- Rem 假设%%a值为a b c 0,因为.a .b .c值均为1,而.0值为空,所以n=3
- if defined n set n=000!n!&echo,!n:~-4!个元素相同的行:%%a
- Rem 如果n值非空(n=3),则显示:0003个元素相同的行:a b c 0
- )
复制代码
作者: battab 时间: 2013-12-28 11:54
回复 4# apang
THANKS!
作者: PowerShell 时间: 2013-12-28 12:25
本帖最后由 PowerShell 于 2013-12-28 12:27 编辑
-------------------点评:------------------
好!
Rem 假设s值为a b c d,就将变量.a .b .c .d分别赋值为1
Rem 假设%%a值为a b c 0,因为.a .b .c值均为1,而.0值为空,所以n=3
这个问题可以变成这样:如何取2个数组的合集?
答:按位与。
即 2个数组相同元素都为1,则结果为1,否则为0,最后把结果按位相加即可。
在powershell中有下列关键字用来计算:
-band 位与
-bor 位或
-bxor 位异或
作者: binghejin 时间: 2013-12-28 14:41
你是打算做一个彩票分析软件吗?呵呵!
作者: battab 时间: 2013-12-30 21:04
回复 7# binghejin
难道你是彩迷?
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |