Chinaunix

标题: 如何判断一个文件中数字连续性 [打印本页]

作者: iamwzh2003    时间: 2008-12-11 15:26
标题: 如何判断一个文件中数字连续性
有一文件中有下列:目前想写一脚本,如果列中数字连续相差1,连续相差10次以上,把开始相差的第一个数字提出来.其他的连续相差不超过10次和不相关的的数字不提取.
1234
3456
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1353
2445
1335
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
6446
6449
6480
6490
6780
6781
6782
6783
6789





目的是只把1112,5346提取出来,其他的不要.该如何实现?

[ 本帖最后由 iamwzh2003 于 2008-12-11 15:28 编辑 ]
作者: ly5066113    时间: 2008-12-11 15:49
  1. awk '{a[NR]=$0}END{for(i=2;i<NR;i++) if(a[i-1]+1!=a[i]&&a[i]+1==a[i+1]) print a[i]}' urfile
复制代码

作者: ILoveMK    时间: 2008-12-11 16:10
提示: 作者被禁止或删除 内容自动屏蔽
作者: ILoveMK    时间: 2008-12-11 16:18
提示: 作者被禁止或删除 内容自动屏蔽
作者: ly5066113    时间: 2008-12-11 16:18
标题: 回复 #3 ILoveMK 的帖子
晕,楼主改需求了。

  1. awk '{if(s+1==$1) k++;else{if(k>=10) print s-k;k=0};s=$1}' urfile
复制代码

[ 本帖最后由 ly5066113 于 2008-12-11 16:20 编辑 ]
作者: iamwzh2003    时间: 2008-12-11 16:23
谢谢啊,我测试一下
作者: ILoveMK    时间: 2008-12-11 16:27
提示: 作者被禁止或删除 内容自动屏蔽
作者: ly5066113    时间: 2008-12-11 16:49
标题: 回复 #7 ILoveMK 的帖子
没有考虑过多的情况,只是根据楼主的数据写的代码。

可以再试试下面的,考虑了首尾都会出现连续的情况。
awk '{if(s+1==$1&&NR>1) k++;else{if(k> print s-k;k=0};s=$1}END{if(k> print s-k}' urfile
作者: ILoveMK    时间: 2008-12-11 17:06
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2