标题: [文本处理] [已解决]批处理怎样根据文本第一列处理第二列文本? [打印本页]
作者: 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
- @echo off
- (for /f "tokens=1,2 delims=," %%1 in (a.txt) do (
- if not defined _%%1 (
- if defined #1 (echo,) else set #1=#
- set /p ="%%1-%%2"<nul
- set _%%1=_
- ) else set /p =",%%2"<nul
- )) >b.txt
复制代码
作者: hanyeguxing 时间: 2011-1-21 21:13
不隔行重复时:- @echo off
- (for /f "tokens=1* delims=," %%a in (a.txt) do if defined #%%a (set/p"=,%%b"<nul) else (
- if defined a echo;
- set/p"=%%a-%%b"<nul
- set a==
- set #%%a==
- ))>a_.txt
复制代码
否则:- @echo off
- (for /f "tokens=1* delims=," %%a in ('sort a.txt') do if defined #%%a (set/p"=,%%b"<nul) else (
- if defined a (echo;) else set a==
- set/p"=%%a-%%b"<nul
- set #%%a==
- ))>a_.txt
复制代码
[ 本帖最后由 hanyeguxing 于 2011-1-21 21:31 编辑 ]
作者: asnahu 时间: 2011-1-22 10:00
awk解法:
- 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://www.bathome.net/) |
Powered by Discuz! 7.2 |