当前位置: 技术问答>linux和unix
shell处理数据:如何将列转换成行
来源: 互联网 发布时间:2017-03-05
本文导语: 本帖最后由 poetryben 于 2012-07-17 22:44:59 编辑 接触shell没有多长时间,不知道awk和sed的功能,处理数据时很难下手,最近又遇到一个问题。 有个项目要提取源数据库数据,有一个需求是:把列的内容增加到行的内容里,...
有个项目要提取源数据库数据,有一个需求是:把列的内容增加到行的内容里,如下,
文件a:
18900000000 1 快乐
18900000000 1 幸福
18900000000 1 美满
18977777777 1
18966666666 1 美妙
现需将文件a转换成:
18900000000 1 快乐,幸福,美满
18977777777 1
18966666666 1 美妙
弄了一天,没有什么收获,各位大侠,有什么办法能解决吗?
万分感谢!
|
zhu@ubuntu:~/shell$ cat a.txt
18900000000 1 快乐
18900000000 1 幸福
18900000000 1 美满
18977777777 1
18966666666 1 美妙
zhu@ubuntu:~/shell$ cat a.txt|perl -ane 'if ($F[0] == $old) {print "t$F[2]"} else {$old = $F[0]; print "n", join("t", @F);}'
18900000000 1 快乐 幸福 美满
18977777777 1
18966666666 1 美妙zhu@ubuntu:~/shell$ ^C
zhu@ubuntu:~/shell$
18900000000 1 快乐
18900000000 1 幸福
18900000000 1 美满
18977777777 1
18966666666 1 美妙
zhu@ubuntu:~/shell$ cat a.txt|perl -ane 'if ($F[0] == $old) {print "t$F[2]"} else {$old = $F[0]; print "n", join("t", @F);}'
18900000000 1 快乐 幸福 美满
18977777777 1
18966666666 1 美妙zhu@ubuntu:~/shell$ ^C
zhu@ubuntu:~/shell$
|
awk 'Begin{s;j=0}{if($1==i){s[j]=s[j]" "$3;next}{j++;s[j]=$0;i=$1}}END{len=asort(s);for(k=1;k