![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-12 10:46 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 【已结】一个比较文件内容的难题 |
| 可打印版本 891 / 4 |
| 第1楼 bobofu | 发表于 2010-04-16 11:48 |
| 新手上路 发帖 8 积分 13 | |
|
【已结】一个比较文件内容的难题 文件内容示例(1000余条记录):
AAA,BBB,CC,D,EEEEEEEE,950 SSS,GGG,CC,F,EEEEEEEE,1000 SSS,GGG,CC,F,EEEEEEEE,800 PPP,YYY,FF,E,DDDDDDDD,1250 KKK,JJJ,HH,D,TTTTTTTT,400 KKK,JJJ,HH,D,TTTTTTTT,1200 KKK,JJJ,HH,D,TTTTTTTT,800 ------------------------------------------------------------------------------------------------- 文件中存在以下情况,2条以上的记录前5项相同,最后1项不同,如: SSS,GGG,CC,F,EEEEEEEE,1000 SSS,GGG,CC,F,EEEEEEEE,800 KKK,JJJ,HH,D,TTTTTTTT,400 KKK,JJJ,HH,D,TTTTTTTT,1200 KKK,JJJ,HH,D,TTTTTTTT,800 ------------------------------------------------------------------------------------------------- 希望输出结果: AAA,BBB,CC,D,EEEEEEEE,950 SSS,GGG,CC,F,EEEEEEEE,1000 PPP,YYY,FF,E,DDDDDDDD,1250 KKK,JJJ,HH,D,TTTTTTTT,1200 即: 1、前5项没有相同记录的,直接输出; 2、前5项有相同记录的,输出第6项数字最大的记录。 希望高手指点,谢谢! [ Last edited by bobofu on 2010-4-16 at 14:56 ] |
|
| 第2楼 HAT | 发表于 2010-04-16 14:17 |
| 版主 发帖 5,017 积分 9,023 | |
|
gawk比较容易实现
|
|
| 第3楼 Hanyeguxing | 发表于 2010-04-16 14:23 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
|
这个批处理在实际运行中对原文本有很多要求,以AAA,BBB,CC,D,EEEEEEEE,950这一行为示例:在ABCDE所代表的字符中,不能有英文符号和空格,例如=等号,逗号;分号!叹号%等等。 [ Last edited by Hanyeguxing on 2010-4-16 at 14:31 ] |
|
| 第4楼 bobofu | 发表于 2010-04-16 14:41 |
| 新手上路 发帖 8 积分 13 | |
|
谢谢Hanyeguxing!代码成功! 谢谢Hanyeguxing!代码成功!
![]() 我的文本符合你说的要求。 这句没有看懂: for /f "tokens=1* delims==" %%a in ('set han_' do set a=%%a&set "a=!a:~4!"&set "a=!a:#=,!"&>>b.txt echo.!a!,%%b |
|
| 第5楼 Hanyeguxing | 发表于 2010-04-16 15:20 |
| 银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂 | |
|
以AAA,BBB,CC,D,EEEEEEEE,950这一行为示例,定义变量后就是
han_AAA#BBB#CC#D#EEEEEEEE=950,其中变量名是han_AAA#BBB#CC#D#EEEEEEEE,变量值是950。 set han_就是显示所有以han_开头的变量,这个时候han_AAA#BBB#CC#D#EEEEEEEE=950就被匹配出来了。 for /f "tokens=1* delims==" %%a in ......,以=分隔他,所以%%a为han_AAA#BBB#CC#D#EEEEEEEE,%%b为950。 set a=%%a把%%a赋值给变量a,set "a=!a:~4!"则截取了这个变量的从第4个字符开始所有的字符,也就是这个时候a就是AAA#BBB#CC#D#EEEEEEEE。 set "a=!a:#=,!"把变量a中的所有#替换成,从而a 成了AAA,BBB,CC,D,EEEEEEEE。 >>b.txt echo.!a!,%%b实际就是>>b.txt echo.AAA,BBB,CC,D,EEEEEEEE,950 实际整个批处理就两个for整句,第一个for把符合条件的行内容定义为变量,第二for再把匹配的变量转换后输出。 [ Last edited by Hanyeguxing on 2010-4-16 at 15:29 ] |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |