Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1060058
  • 博文数量: 186
  • 博客积分: 4939
  • 博客等级: 上校
  • 技术积分: 2075
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-08 17:15
文章分类

全部博文(186)

文章存档

2018年(1)

2017年(3)

2016年(11)

2015年(42)

2014年(21)

2013年(9)

2012年(18)

2011年(46)

2010年(35)

分类: 系统运维

2010-11-03 10:59:29

格式如下:
A        20        56
B        40        68
A        207        236
C        136        152
B        86        121
A        95        110
B        161        186
A        145        170

第一列为元素,可以理解为坐标,第二列和第三列分别为元素的起点和终点,同一元素可以有多段,现要找出起止点范围内没有其他的元素出现,上述数据即A的第4段符合。

A        207        236

简单理解为,只要文件里任意两行有交集,则舍弃。

易懂版(效率低,需要展开$2~$3)

awk '{a[$1" "$2" "$3];for(i=$2;i<=$3;i++)b[i]++}END{for(j in a){split(j,m," ");flag=1;for(k=m[2];k<=m[3];k++)if(b[k]>1){flag=0;break}}if(flag==1){print j}}'

或者更加难懂的:)

  1. [root@linux ~]# awk 'NR==FNR{ a[$1" "$2" "$3]=$1; line++ }NR>FNR{

  2.         counter=0
  3.      
  4.         for(i in a)

  5.         {
  6.            split(i,m," ")
  7.  
  8.           if($3m[3] || (m[2]==$2 && m[3]==$3))

  9.                   counter++
  10.                                   
  11.           else next
  12.                                      
  13.           if(counter == line)

  14.           print $0

  15.         }

  16. }' file file
  17. A 207 236

阅读(736) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~