免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5514 | 回复: 22
打印 上一主题 下一主题

求助:如何将数据域中一列转为一行? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-10-21 21:46 |只看该作者 |倒序浏览
数据域有多列,如何将一列转为一行?我搜索了论坛没有找到可行的方法。
我用 gawk 'BEGIN {FS=","};{for (i=1;i<=NF;i++) {printf("%s",$i);printf("\n"}}' file.txt
只是得到一列,就是替换 “,” 为 “\n” 的效果。
由于我在 XP 下,shell 语法没法转换为 CMD 的。能给出 sed awk 等的方案吗?谢谢了!

原数据如下:
'阳光初现','雪夜灯光','斜风细雨','小雨','瀑布'...
'174332850422.gif','174332386045.gif','174332346178.gif','174332770688.gif','174330531485.gif'...

理想目标样式如下,不去除 ' 也可以。

阳光初现        174332850422.gif
雪夜灯光        174332386045.gif
斜风细雨        174332346178.gif
小雨        174332770688.gif
瀑布        174330531485.gif
...

论坛徽章:
0
2 [报告]
发表于 2005-10-21 22:56 |只看该作者

求助:如何将数据域中一列转为一行?


  1. awk -F, '{for(i=1;i<=NF;i++){a[NR"_"i]=$i}}END{for(m=1;m<=i;m++){for(n=1;n<=NR;n++){printf("%s,", a[n"_"m])}print "\n"}}'
复制代码

论坛徽章:
0
3 [报告]
发表于 2005-10-22 00:48 |只看该作者

求助:如何将数据域中一列转为一行?

太牛了,完全可行!
只是没太看懂,只知道放到一个二维数组里了,看来要努力学了。

论坛徽章:
0
4 [报告]
发表于 2005-10-22 13:43 |只看该作者

求助:如何将数据域中一列转为一行?

[quote]原帖由 "wmjie"][/quote 发表:
佩服!

论坛徽章:
0
5 [报告]
发表于 2005-10-22 19:47 |只看该作者

求助:如何将数据域中一列转为一行?

看俺的:paste -d":" -s file|sed 's/://g'

论坛徽章:
0
6 [报告]
发表于 2005-10-22 20:53 |只看该作者

求助:如何将数据域中一列转为一行?

[quote]原帖由 "yycfriends"]看俺的:paste -d":" -s file|sed 's/://g'[/quote 发表:

你是解答的我这个帖子的问题吗?

论坛徽章:
0
7 [报告]
发表于 2005-10-22 20:59 |只看该作者

求助:如何将数据域中一列转为一行?

[quote]原帖由 "yycfriends"]看俺的:paste -d":" -s file|sed 's/://g'[/quote 发表:

我刚理解过来,你为什么这样答复。   你看走眼了。不是双行并一行哦!

论坛徽章:
0
8 [报告]
发表于 2005-10-23 09:32 |只看该作者

求助:如何将数据域中一列转为一行?

佩服!
顶!!!!!

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-08-11 06:20:00
9 [报告]
发表于 2005-10-23 14:15 |只看该作者

求助:如何将数据域中一列转为一行?

文件如果很大,会不会溢出啊?
awk 中每行的域不能大于 1024 的!

用数组存,文件很大,估计。。。不好说
哪位试试看!!

论坛徽章:
0
10 [报告]
发表于 2005-10-23 18:33 |只看该作者

求助:如何将数据域中一列转为一行?

写一个比较笨的,但更通用些,可处理不止2行,记得以前精华贴里也有高人写过类似转置矩阵的东西

  1. #!/bin/bash
  2. OIFS=$IFS
  3. IFS=","
  4. while read line
  5. do
  6.   i=0
  7.   for e in $line ;do
  8.     a[$i]="${a[$i]} $e"
  9.     i=$((i+1))
  10.   done
  11. done <file
  12. IFS=$OIFS
  13. i=0
  14. while [ $i -lt ${#a[*]} ];do
  15.   echo ${a[$i]}
  16.   i=$((i+1))
  17. done

复制代码

file:

  1. 0,0,0,0,0
  2. 0,1,2,3,4
  3. 5,6,7,8,9
  4. a,b,c,d,e
  5. e,f,g,h,i
  6. j,k,l,m,n
复制代码


转换后

  1. 0 0 5 a e j
  2. 0 1 6 b f k
  3. 0 2 7 c g l
  4. 0 3 8 d h m
  5. 0 4 9 e i n
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP