免费注册 查看新帖 |

Chinaunix

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

问下如何将文件中某一列数据分割成多个 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-01 16:15 |只看该作者 |倒序浏览
比如文件有行如下:
1   100     2|4|42|45   0
2   21       3|6|11        2
3   10       10              3
4   14       2|11|20|56|33|100    1
5   12       5                2
......

这里就是想把红色标记的第三列的数据(文件中以|为分隔符写为一列的)分隔开,写成多列,但是有些行
第三列就只有一个数据,就不用分了,并且每一行的第三列的长度不一,可能有1|2|3.....这样一直到1000的,

结果需要如下:

1  100   2     0
1  100   4    0
1  100   42   0
1  100   45   0
2   21    3     2
2   21    6     2
2   21    11     2
3   10    10    3
4   14    2      1
4   14   11     1
.....

有什么好办法吗?我想不出怎么可以打印这些长度不一的列。。。
谢谢先啦

论坛徽章:
0
2 [报告]
发表于 2009-11-01 17:12 |只看该作者
awk '{split($3,A,"|");for(i in A)print $1,$2,A,$4}' urfile

[ 本帖最后由 freecr 于 2009-11-1 17:15 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-11-01 17:16 |只看该作者

回复 #2 freecr 的帖子

奇怪,我print后面写的是A带下标i的,怎么提交帖子了就只变成A,后面的i没了

[ 本帖最后由 freecr 于 2009-11-1 17:17 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2009-11-01 17:42 |只看该作者

回复 #3 freecr 的帖子

split是内置的函数吗?

论坛徽章:
0
5 [报告]
发表于 2009-11-01 20:44 |只看该作者
  1. awk '{printf $1" "$2;for (i=1;i<=split($3,M,"|");i++) printf " "M[i];print " "$4}' file
复制代码

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
6 [报告]
发表于 2009-11-01 21:13 |只看该作者

回复 #1 pazzazzuri 的帖子

split就行了。

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
7 [报告]
发表于 2009-11-03 09:12 |只看该作者
原帖由 freecr 于 2009-11-1 17:16 发表
奇怪,我print后面写的是A带下标i的,怎么提交帖子了就只变成A,后面的i没了

需要将代码放在这里,就不会转义了。

  1. test
复制代码

[ 本帖最后由 rdcwayx 于 2009-11-3 09:13 编辑 ]

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
8 [报告]
发表于 2009-11-03 09:19 |只看该作者
原帖由 ywlscpl 于 2009-11-1 20:44 发表
  1. awk '{printf $1" "$2;for (i=1;i<=split($3,M,"|");i++) printf " "M[i];print " "$4}' file
复制代码


ywlscpl的脚本让我很困惑,输出结果好像也有问题, 改成这样,就好理解了。

  1. awk '{for (i=1;i<=split($3,M,"|");i++) print $1,$2,M[i], $4}' urfile
复制代码

[ 本帖最后由 rdcwayx 于 2009-11-3 09:21 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2009-11-03 11:03 |只看该作者

回复 #8 rdcwayx 的帖子

你的是对了,我仔细看了下楼主的输出要求,我前面的理解错了,以为只是在本行内展开$3

论坛徽章:
11
金牛座
日期:2015-03-19 16:56:22数据库技术版块每日发帖之星
日期:2016-08-02 06:20:00数据库技术版块每日发帖之星
日期:2016-04-24 06:20:00数据库技术版块每日发帖之星
日期:2016-04-13 06:20:00IT运维版块每日发帖之星
日期:2016-04-13 06:20:00数据库技术版块每日发帖之星
日期:2016-02-03 06:20:00数据库技术版块每日发帖之星
日期:2015-08-06 06:20:00季节之章:春
日期:2015-03-27 15:54:57羊年新春福章
日期:2015-03-27 15:54:37戌狗
日期:2015-03-19 16:56:41数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
10 [报告]
发表于 2009-11-03 12:19 |只看该作者
awk 内置 split 函数就足够使用.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP