免费注册 查看新帖 |

Chinaunix

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

[文本处理] 求助,判断相邻两行相等合并问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-01-22 16:36 |只看该作者 |倒序浏览
文本A:
123,A,2:28
123,B,2:28
123,B,2:29
123,C,2:34
123,D,2:35
123,C,3:49
123,C,3:50
123,E,3:55
123,C,3:55
123,F,18:26
123,F,19:12
456,G,8:06
456,G,8:07
456,H,10:33
456,I,10:56
456,J,14:43
456,K,19:37


问题描述:判断本行和下一行的$1和$2的值是否相同,相同就进行合并,不相同就补0,格式为:用户,位置,最小时间,最大时间

输出文本B:
123,A,2:28,0
123,B,2:28,2:29
123,C,2:34,0
123,D,2:35,0
123,C,3:49,3:50
123,E,3:55,0
123,C,3:55,0
123,F,18:26,19:12
456,G,8:06,8:07
456,H,10:33,0
456,I,10:56,0
456,J,14:43,0
456,K,19:37,0


请教下各位,这个应该怎么弄的

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
2 [报告]
发表于 2017-01-22 17:48 |只看该作者
  1. awk -F, '{while(getline N){split(N,a,",");if($1$2==a[1]a[2]){$0=$0","a[3];t=1;continue}print t?$0:$0","0;t=0;$0=N}}END{print t?$0:$0","0}' file
复制代码

论坛徽章:
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
3 [报告]
发表于 2017-01-22 18:04 |只看该作者

  1. sed -r '$ba;N;/(([^,]+,[^,]+)\b.*)\n\2\b/!{:a;s/$/,0/M;P;D};s//\1/' A
复制代码

论坛徽章:
0
4 [报告]
发表于 2017-01-22 21:35 |只看该作者
回复 2# reyleon

感谢六哥,mark下学习

论坛徽章:
0
5 [报告]
发表于 2017-01-22 21:36 |只看该作者
回复 3# moperyblue

感谢,虽然sed不是好熟练,先学习

论坛徽章:
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
6 [报告]
发表于 2017-01-22 22:31 |只看该作者
回复 1# kwunkau

$ awk -F, 'function k(){S1=$1;S2=$2;S=$0;t=",0"}NR==1{k();next}{if(S1==$1&&S2==$2){S=S","$3;t="";next}print S t;k()}END{print S t}' file
123,A,2:28,0
123,B,2:28,2:29
123,C,2:34,0
123,D,2:35,0
123,C,3:49,3:50
123,E,3:55,0
123,C,3:55,0
123,F,18:26,19:12
456,G,8:06,8:07
456,H,10:33,0
456,I,10:56,0
456,J,14:43,0
456,K,19:37,0

论坛徽章:
6
羊年新春福章
日期:2015-03-03 17:16:28双子座
日期:2015-03-03 17:16:56巳蛇
日期:2015-03-03 17:17:2415-16赛季CBA联赛之福建
日期:2016-03-11 09:05:00黑曼巴
日期:2016-07-07 16:58:1215-16赛季CBA联赛之吉林
日期:2016-11-14 09:23:07
7 [报告]
发表于 2017-01-23 10:23 |只看该作者
  1. #!/usr/bin/env python
  2. #_*_ coding:utf-8 _*_
  3. # Author: jiachen

  4. FileName = "file"

  5. with open(FileName,"r") as read_f:
  6.     while True:
  7.         line1 = read_f.readline().strip().split(",")
  8.         num = read_f.tell()
  9.         line2 = read_f.readline().strip().split(",")
  10.         if line1 != [""]:
  11.             if line1[0] == line2[0] and line1[1] == line2[1]:
  12.                 print ("%s,%s,%s,%s" % (line1[0],line1[1],line1[2],line2[2]))
  13.             else:
  14.                 print ("%s,%s,%s,%d" % (line1[0], line1[1], line1[2],0))
  15.                 read_f.seek(num)
  16.         else:
  17.             break
复制代码

论坛徽章:
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
8 [报告]
发表于 2017-01-23 12:58 |只看该作者
本帖最后由 moperyblue 于 2017-01-23 14:11 编辑
  1. awk 's{f=0;if($1==a&&$2==b){print s,$3;getline}else{print s,0;f=1}}{s=$0;a=$1;b=$2}END{if(f)print s,0}' FS=, OFS=, A
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP