免费注册 查看新帖 |

Chinaunix

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

[文本处理] 两两有关联的三行合并成一行 [复制链接]

论坛徽章:
1
15-16赛季CBA联赛之广夏
日期:2016-04-12 15:53:16
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-09-28 09:56 |只看该作者 |倒序浏览
1.txt:
we:fr,123:000,LOG,U,01,103,03,0,Passed[0x0d]
ed:gf,123:000,LOG,B,01,52,01,0,Passed[0x0d]
fe:dD,123:000,LOG,PL,01,51,01,01,101,01[0x0d]
vf:be,123:000,LOG,P,01,51,01,0,Passed[0x0d]
dw:ue,123:000,LOG,L,01,101,01,0,Passed[0x0d]
re:mj,123:000,LOG,PL,01,51,01,01,101,03[0x0d]
ki:hn,123:000,LOG,P,01,51,01,0,Passed[0x0d]
jh:hy,123:000,LOG,L,01,101,03,0,Passed[0x0d]
yuc,123:000,LOG,PL,01,51,01,01,101,04[0x0d]
yt:XW,123:000,LOG,P,01,51,01,0,Passed[0x0d]
ry:fr,123:000,LOG,L,01,101,04,0,Passed[0x0d]
od:fr,123:000,LOG,PL,01,51,01,01,101,01[0x0d]
fe:ed,123:000,LOG,P,01,51,01,0,Passed[0x0d]
gd:de,123:000,LOG,L,01,101,01,0,Passed[0x0d]
dv:fe,123:000,LOG,UL,01,101,01,01,102,01[0x0d]
vd:ED,123:000,LOG,U,01,101,01,0,Passed[0x0d]
sf:vt,123:000,LOG,L,01,102,01,0,Passed[0x0d]
gf:gt,123:000,LOG,U,01,101,01,0,Passed[0x0d]
fr:we,123:000,LOG,L,01,102,01,0,Passed[0x0d]
df:r5,123:000,LOG,PL,01,51,01,01,101,01[0x0d]
wr:24,123:000,LOG,P,01,51,01,0,Passed[0x0d]
Xs:23,123:000,LOG,UL,01,101,01,01,102,01[0x0d]
fd:fd,123:000,LOG,U,01,101,01,0,fail[0x0d]
DD:ef,123:000,LOG,L,01,102,01,0,fail[0x0d]
WS:32,123:000,LOG,PB,01,21,01,01,103,01[0x0d]
fr:de,123:000,LOG,B,01,103,01,0,Passed[0x0d]
yt:34,123:000,LOG,PL,01,51,01,01,101,02[0x0d]
ut:56,123:000,LOG,P,01,51,01,0,Passed[0x0d]
yr:hy,123:000,LOG,L,01,101,02,0,Passed[0x0d]
re:gt,123:000,LOG,PB,01,51,01,01,12,01[0x0d]
gt:45,123:000,LOG,P,01,51,01,0,Passed[0x0d]
gt:r4,123:000,LOG,B,01,12,01,0,Passed[0x0d]


结果是:
000,LOG,PL,01,51,01,01,101,01[0x0d]|000,LOG,P,01,51,01,0,Passed[0x0d]|000,LOG,L,01,101,01,0,Passed[0x0d]
000,LOG,PL,01,51,01,01,101,03[0x0d]|000,LOG,P,01,51,01,0,Passed[0x0d]|000,LOG,L,01,101,03,0,Passed[0x0d]
000,LOG,PL,01,51,01,01,101,04[0x0d]|000,LOG,P,01,51,01,0,Passed[0x0d]|000,LOG,L,01,101,04,0,Passed[0x0d]
000,LOG,PL,01,51,01,01,101,01[0x0d]|000,LOG,P,01,51,01,0,Passed[0x0d]|000,LOG,L,01,101,01,0,Passed[0x0d]
000,LOG,UL,01,101,01,01,102,01[0x0d]|000,LOG,U,01,101,01,0,Passed[0x0d]|000,LOG,L,01,102,01,0,Passed[0x0d]
000,LOG,PL,01,51,01,01,101,02[0x0d]|000,LOG,P,01,51,01,0,Passed[0x0d]|000,LOG,L,01,101,02,0,Passed[0x0d]
000,LOG,PB,01,51,01,01,12,01[0x0d]|000,LOG,P,01,51,01,0,Passed[0x0d]|000,LOG,B,01,12,01,0,Passed[0x0d]

第一行的$5$6等于第二行的$5$6,第一行的$8$9等于第三行的$5$6,并且第二行和第三行$8=Passed[0x0d]
000,LOG,PL,01,51,01,01,101,01[0x0d]
000,LOG,P,01,51,01,0,Passed[0x0d]
000,LOG,L,01,101,01,0,Passed[0x0d]

谢了~

论坛徽章:
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 [报告]
发表于 2016-09-28 10:08 |只看该作者

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
3 [报告]
发表于 2016-09-28 11:23 |只看该作者
  1. awk -F'[,[]' '{$0=substr($0,11)}/Passed/{if(a==$5$6)s=c"|"$0;if(b==$5$6){print s"|"$0;s=a=b=c=""}}NF>9{a=$5$6;b=$8$9;c=$0}'
复制代码

论坛徽章:
1
15-16赛季CBA联赛之广夏
日期:2016-04-12 15:53:16
4 [报告]
发表于 2016-09-28 11:25 |只看该作者
回复 2# jason680


额,没讲请?
就是1.txt有3行,是一个关联
fe:dD,123:000,LOG,PL,01,51,01,01,101,01[0x0d]
vf:be,123:000,LOG,P,01,51,01,0,Passed[0x0d]
dw:ue,123:000,LOG,L,01,101,01,0,Passed[
0x0d]


PL可分为P,L的两行
PL的那一行的51,01对应P的那一行的51,01
PL的那一行的101,01对应P的那一行的101,01
并且含P,L的两行还要有Passed[0x0d]



文本里还有UL,但是对应位置都是一样的
dv:fe,123:000,LOG,UL,01,101,01,01,102,01[0x0d]
vd:ED,123:000,LOG,U,01,101,01,0,Passed[0x0d]
sf:vt,123:000,LOG,L,01,102,01,0,Passed[0x0d]

论坛徽章:
1
15-16赛季CBA联赛之广夏
日期:2016-04-12 15:53:16
5 [报告]
发表于 2016-09-28 16:52 |只看该作者
回复 3# haooooaaa

谢谢!

Wendys-Mac-miniesktop wendy$ awk -F'[,[]' '{$0=substr($0,11)}/Passed/{if(a==$5$6)s=c"|"$0;if(b==$5$6){print s"|"$0;s=a=b=c=""}}NF>9{a=$5$6;b=$8$9;c=$0}' /Users/wendy/Desktop/345767.txt
|000,LOG,L,01,101,01,0,Passed[0x0d]
|000,LOG,L,01,101,03,0,Passed[0x0d]
|000,LOG,L,01,101,04,0,Passed[0x0d]
|000,LOG,L,01,101,01,0,Passed[0x0d]
|000,LOG,L,01,102,01,0,Passed[0x0d]]
|000,LOG,B,01,103,01,0,Passed[0x0d]
|000,LOG,L,01,101,02,0,Passed[0x0d]
|000,LOG,B,01,12,01,0,Passed[0x0d]
Wendys-Mac-miniesktop wendy$

但是得不到结果
Wendys-Mac-miniesktop wendy$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin15)
Copyright (C) 2007 Free Software Foundation, Inc.
Wendys-Mac-miniesktop wendy$


论坛徽章:
30
申猴
日期:2014-04-10 09:43:532015年亚洲杯纪念徽章
日期:2015-03-20 14:40:232015亚冠之阿尔纳斯尔
日期:2015-06-02 18:59:042015亚冠之阿尔希拉尔
日期:2015-06-30 15:22:572015亚冠之大阪钢巴
日期:2015-07-20 10:44:332015亚冠之阿尔纳斯尔
日期:2015-10-28 14:57:5215-16赛季CBA联赛之新疆
日期:2015-12-25 10:18:45黑曼巴
日期:2016-06-26 21:39:5315-16赛季CBA联赛之山西
日期:2016-07-25 21:54:2715-16赛季CBA联赛之北京
日期:2016-10-27 12:07:2315-16赛季CBA联赛之八一
日期:2017-07-07 16:39:0915-16赛季CBA联赛之吉林
日期:2017-09-04 12:14:43
6 [报告]
发表于 2016-09-28 16:55 |只看该作者
本帖最后由 zxy877298415 于 2016-09-28 21:48 编辑

回复 1# _lpq


  1. awk -F, 'function f(x,y) {return split(x,y,"[,[\\]]")}length($4)==2{a[++i]=$0;next}a[i]{a[i]=a[i]"  "$0}END{for(j=1;j<=i;j++) {t=split(a[j],b,"  ");if(t>=3){m=f(b[1],c);n=f(b[2],d);o=f(b[3],e);if(c[6]c[7]==d[6]d[7]&&c[m-3]c[m-2]==e[6]e[7]&&d[n-2]d[m-2]=="Passed0x0d"&&e[n-2]e[m-2]=="Passed0x0d") {print  gensub("..:..,...:","","G",b[1]b[2]b[3])}}}}' file
复制代码

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP