免费注册 查看新帖 |

Chinaunix

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

[文本处理] awk 求救 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-07-31 06:35 |只看该作者 |倒序浏览
现在客户有一个需求,要求把一个 下面的文本文件 :-


k1, k2,  v1a, v1b, v1c, v1d,    v2a, v2b, v2c, v2d .... vna, vnb, vnc, vnd   
k1, k2,  v1a, v1b, v1c, v1d,    v2a, v2b, v2c, v2d .... vna, vnb, vnc, vnd   
。。。。。。

其中,k1,k2列是每行的key,   其他列是数据,每四列是一组, v1a, v1b, v1c, v1d,共有n组,现在要求转换为 以下格式

k1, k2, v1a, v1b, v1c, v1d
k1, k2, v2a, v2b, v2c, v2d
....
k1, k2,  vna, vnb, vnc, vnd   
k1, k2,  v1a, v1b, v1c, v1d
k1, k2,  v2a, v2b, v2c, v2d
....
k1, k2, vna, vnb, vnc, vnd   

我试了一些awk方法,但是总是不对。求各位大神帮忙 :)


论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
2 [报告]
发表于 2016-07-31 07:26 |只看该作者
回复 1# hbiczuo

  1. awk 'BEGIN{FS="\\s*,\\s*";OFS=","}{for(i=3;i<=NF;i+=4){print $1,$2,$i,$(i+1),$(i+2),$(i+3)}}' urfile
  2. k1,k2,v1a,v1b,v1c,v1d
  3. k1,k2,v2a,v2b,v2c,v2d
  4. k1,k2,vna,vnb,vnc,vnd
  5. k1,k2,v1a,v1b,v1c,v1d
  6. k1,k2,v2a,v2b,v2c,v2d
  7. k1,k2,vna,vnb,vnc,vnd
复制代码

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
3 [报告]
发表于 2016-07-31 08:15 |只看该作者
  1. perl -F',\s+' -nle 'BEGIN{$,=",";$n=2}print @F[0,1],@F[$n..$n+3] and $n+=4  for 1..((@F-2)/4)' f
复制代码
k1,k2,v1a,v1b,v1c,v1d
k1,k2,v2a,v2b,v2c,v2d
k1,k2,vna,vnb,vnc,vnd

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
4 [报告]
发表于 2016-07-31 10:05 |只看该作者
本帖最后由 moperyblue 于 2016-07-31 19:13 编辑
  1. sed -r ':a;s/(([^,]*,\s){2}\s)(([^,]*,\s){3}[^,]*),\s+/\1\3\n\1/M;ta'
复制代码
k1, k2,  v1a, v1b, v1c, v1d
k1, k2,  v2a, v2b, v2c, v2d
k1, k2,  vna, vnb, vnc, vnd
  1. awk -F", {2,}" '{for(i=2;i<=NF;i++)print $1", ",$i}'
复制代码
k1, k2,  v1a, v1b, v1c, v1d
k1, k2,  v2a, v2b, v2c, v2d
k1, k2,  vna, vnb, vnc, vnd

论坛徽章:
2
luobin
日期:2016-06-17 17:46:36lufei
日期:2016-06-17 17:49:16
5 [报告]
发表于 2016-07-31 16:24 |只看该作者
awk -F, -vm="4*i" 'BEGIN{OFS=","}{len=split($0,a,",")}{s=NF/4-2/4;for(i=1;i<=s;i++)print $1,$2, a[m-1],a[m+0],a[m+1],a[m+2]}' file

论坛徽章:
0
6 [报告]
发表于 2016-07-31 18:34 |只看该作者
回复 5# hz_oracle

thanks, 行数是对的,但是 好像 m值没有传进去,每行的值都是一样的


   

论坛徽章:
0
7 [报告]
发表于 2016-07-31 18:37 |只看该作者
回复 2# Herowinter

多谢! 这个可以!


   

论坛徽章:
0
8 [报告]
发表于 2016-07-31 18:43 |只看该作者
回复 4# moperyblue

好像不可以,不知道为什么。 :)


   

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
9 [报告]
发表于 2016-07-31 19:10 |只看该作者
回复 8# hbiczuo
  1. 这需要看原始数据的格式了

  2. 提问:
  3. 1. k1, k2,后面是两个空格吗? 还是tab?
  4. 2. 每组四个数之间是一个逗号加一个空格吗? 还是仅仅逗号?
  5. 3. 每组之间是以tab分隔吗? 还是以多于两个空格分隔?
复制代码

论坛徽章:
0
10 [报告]
发表于 2016-07-31 21:14 |只看该作者
回复 9# moperyblue

提问:
1. k1, k2,后面是两个空格吗? 还是tab?  [现在是空格]
2. 每组四个数之间是一个逗号加一个空格吗? 还是仅仅逗号? [仅仅是逗号,因为是从excel转出的文件]
3. 每组之间是以tab分隔吗? 还是以多于两个空格分隔?[从excel转出的,所以都是逗号分割的]




   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP