Board logo

标题: [文本处理] [已解决]批处理怎样根据文本第一列处理第二列文本? [打印本页]

作者: daohe    时间: 2011-1-21 20:15     标题: [已解决]批处理怎样根据文本第一列处理第二列文本?

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 编辑 ]
作者: hanyeguxing    时间: 2011-1-21 20:58

第一列的数字是否会隔行重复?
例如:
1
1
1
2
1
作者: tmplinshi    时间: 2011-1-21 21:02

  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
复制代码

作者: hanyeguxing    时间: 2011-1-21 21:13

不隔行重复时:
  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 编辑 ]
作者: asnahu    时间: 2011-1-22 10:00

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

作者: daohe    时间: 2011-1-22 22:08

感谢  寒夜孤星,tmplinshi,asnahu

代码都可以用.




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2