免费注册 查看新帖 |

Chinaunix

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

竖排文件如何按照以下要求分行??(已解决) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-06 15:47 |只看该作者 |倒序浏览
本帖最后由 vitas333_cu 于 2012-02-06 21:36 编辑

file1

一月五号
1
张三
90分
2
李四
80分
二月三
三月二十九
1
王某
87分
2
孙某
100
3
郭某
88分
4
曾某
77分
5
孙某


最后要得到的结果
一月五号 1 张三 90分
一月五号 2 李四 缺席
二月三
三月二十九 1 王某 87分
三月二十九 2 孙某 100
三月二十九 3 郭某 88分
三月二十九 4 曾某 77分
三月二十九 5 孙某 无



其中二月份没有成绩。

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
2 [报告]
发表于 2012-02-06 16:02 |只看该作者
回复 1# vitas333_cu

$ awk -vn=1 '/分$/{print m""d,$0;d="";n++;next}/月$/{if(!n)print m;m=$0;n=0;next}{d=d" "$0}' file1
一月 1 张三 90分
一月 2 李四 80分
二月
三月 1 王某 87分
三月 2 孙某 40分
三月 3 郭某 88分
三月 4 曾某 77分

   

论坛徽章:
0
3 [报告]
发表于 2012-02-06 16:37 |只看该作者
回复 2# jason680


    如果 结尾 不是 所有的都是 ‘分’,该怎么解决

论坛徽章:
0
4 [报告]
发表于 2012-02-06 17:25 |只看该作者
  1. awk -vFS='\n' -vRS='\\w+月\\w+号\n' '{sub("\n","",RT)}NR==1{ort=RT;next}NF<1{print ort;ort=RT}{for(i=1;i<NF-2;i+=3)print ort,$i,$(i+1),$(i+2);ort=RT}'
复制代码

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
5 [报告]
发表于 2012-02-06 17:51 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
6 [报告]
发表于 2012-02-06 17:52 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2012-02-06 18:10 |只看该作者
回复 6# zooyo


    呵呵 ,需求 来的太猛烈了

论坛徽章:
0
8 [报告]
发表于 2012-02-06 18:31 |只看该作者
还改。。。把我4楼代码中的“号”去掉就是的

论坛徽章:
0
9 [报告]
发表于 2012-02-06 18:34 |只看该作者
回复 8# yangkyo821


试过了,返回空值。


   

论坛徽章:
0
10 [报告]
发表于 2012-02-06 18:44 |只看该作者
  1. [joe@joe-laptop ~]$ awk -vFS='\n' -vRS='\\w+月\\w+\n' '{sub("\n","",RT)}NR==1{ort=RT;next}NF<1{print ort;ort=RT}{for(i=1;i<NF-2;i+=3)print ort,$i,$(i+1),$(i+2);ort=RT}' file
  2. 一月五号 1 张三 90分
  3. 一月五号 2 李四 80分
  4. 二月三
  5. 三月二十九 1 王某 87分
  6. 三月二十九 2 孙某 100
  7. 三月二十九 3 郭某 88分
  8. 三月二十九 4 曾某 77分
  9. 三月二十九 5 孙某 无
复制代码
如果你的文件是windows下建立的,用这个
  1. [joe@joe-laptop ~]$ awk -vFS='\r\n' -vRS='\\w+月\\w+\r\n' '{sub("\r\n","",RT)}NR==1{ort=RT;next}NF<1{print ort;ort=RT}{for(i=1;i<NF-2;i+=3)print ort,$i,$(i+1),$(i+2);ort=RT}'
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP