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

[文本处理] [已解决]批处理怎样根据文本第一列处理第二列文本?

a.txt内容如下
每一行逗号前面都有几个相同的数字, 逗号后面都是不重复的整数.
1,252
1,348
1,260
1,189
1,360
1,60
2,107
2,313
2,483
2,424
2,225
2,249
3,494
3,31
3,504
3,476
3,323
3,160
想通过批处理处理成下面的形式.储存在b.txt
1-252,348,260,189,360,60
2-107,313,483,424,225,249
3-494,31,504,476,323,160
就是: a.txt第二列根据第一列为分割加在第一列后面,以逗号分开

[ 本帖最后由 daohe 于 2011-1-22 22:08 编辑 ]
1

评分人数

    • tmplinshi: 感谢给帖子标题标注[已解决]字样PB + 2

第一列的数字是否会隔行重复?
例如:
1
1
1
2
1
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

  1. @echo off
  2. (for /f "tokens=1,2 delims=," %%1 in (a.txt) do (
  3.     if not defined _%%1 (
  4.         if defined #1 (echo,) else set #1=#
  5.         set /p ="%%1-%%2"<nul
  6.         set _%%1=_
  7.     ) else set /p =",%%2"<nul
  8. )) >b.txt
复制代码

TOP

不隔行重复时:
  1. @echo off
  2. (for /f "tokens=1* delims=," %%a in (a.txt) do if defined #%%a (set/p"=,%%b"<nul) else (
  3.         if defined a echo;
  4.         set/p"=%%a-%%b"<nul
  5.         set a==
  6.         set #%%a==
  7. ))>a_.txt
复制代码
否则:
  1. @echo off
  2. (for /f "tokens=1* delims=," %%a in ('sort a.txt') do if defined #%%a (set/p"=,%%b"<nul) else (
  3.         if defined a (echo;) else set a==
  4.         set/p"=%%a-%%b"<nul
  5.         set #%%a==
  6. ))>a_.txt
复制代码

[ 本帖最后由 hanyeguxing 于 2011-1-21 21:31 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

awk解法:
  1. gawk "BEGIN{FS=\",\"}{a[$1]=a[$1]\",\"$2}END{for(i in a)print i\"-\"substr(a,2)}"  urfile
复制代码

TOP

感谢  寒夜孤星,tmplinshi,asnahu

代码都可以用.

TOP

返回列表