免费注册 查看新帖 |

Chinaunix

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

请教一个跨行匹配的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-24 23:29 |只看该作者 |倒序浏览
现有数据如下(以空格分列):

t0 234-CDF 100
t1 123-ABC 100
t2 123-ABC 2
t3 324-DFG 100
t4 234-8DF 2
t5 123-CVB 100
t6 675-MHD 100
t7 675-MHD 2

如何能将满足第2列相同,第3列分别为100和2的相邻两行数据提取出来?谢谢。
对于以上数据,理想的结果如下:
t1 123-ABC 100
t2 123-ABC 2
t6 675-MHD 100
t7 675-MHD 2

论坛徽章:
0
2 [报告]
发表于 2009-02-24 23:34 |只看该作者
awk '{if($2==k && j==100 && $3==2) { print a;print $0}{a=$0;k=$2;j=$3}' urfile

论坛徽章:
0
3 [报告]
发表于 2009-02-24 23:55 |只看该作者

回复 #2 welcome008 的帖子

非常感谢高手指点!
能否再解释一下这里的变量a,k,j为什么放在最后才定义?我是菜鸟,看不懂。
此外,这个问题使用sed是否能够解决?

谢谢!

论坛徽章:
0
4 [报告]
发表于 2009-02-25 00:15 |只看该作者
在处理过那一行后,记录下那一行的相关元素,以便与第二行的进行比较

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
5 [报告]
发表于 2009-02-25 09:21 |只看该作者

回复 #3 xyzlsh 的帖子

sed -r '$!N;/([^ ]+) 100\n.*\1 2/b;D' urfile

论坛徽章:
0
6 [报告]
发表于 2009-02-25 09:29 |只看该作者
原帖由 welcome008 于 2009-2-25 00:15 发表
在处理过那一行后,记录下那一行的相关元素,以便与第二行的进行比较




楼上能不能解释具体点?
如果把{a=$0;k=$2;j=$3} 写到前面,为什么就输出不了呢?

以下:
awk '{{a=$0;k=$2;j=$3} if($2==k && j==100 && $3==2) { print a;print $0}}'  filename

论坛徽章:
0
7 [报告]
发表于 2009-02-25 09:33 |只看该作者
原帖由 ly5066113 于 2009-2-25 09:21 发表
sed -r '$!N;/([^ ]+) 100\n.*\1 2/b;D' urfile



tim大哥, D的作用能否详解一下?
       D      Delete up to the first embedded newline in  the  pattern  space.
              Start  next  cycle,  but skip reading from the input if there is
              still data in the pattern space.

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
8 [报告]
发表于 2009-02-25 09:39 |只看该作者

回复 #7 clfsy 的帖子

看看sed1line吧,里面有例子。

http://bbs.chinaunix.net/viewthread.php?tid=336126

论坛徽章:
0
9 [报告]
发表于 2009-02-25 09:44 |只看该作者

回复 #8 ly5066113 的帖子

我把这个看过两次,还有些不会。

论坛徽章:
0
10 [报告]
发表于 2009-02-25 09:49 |只看该作者
先看上4遍,呵呵!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP