file文件数据内容如下所示:
A 0 0.00521
A 1 0.0111
A 2 0.0173
A 3 0.0281
A 4 0.0423
A 5 0.0606
A 6 0.0938
A 7 0.128
A 8 0.159
A 9 0.174
A 10 0.183
A 11 0.19
A 12 0.2
A 13 0.216
A 14 0.236
A 15 0.257
A 16 0.276
A 17 0.292
A 18 0.309
A 19 0.327
A 20 0.342
A 21 0.36
A 22 0.375
A 23 0.392
A 24 0.413
A 25 0.434
A 26 0.454
A 27 0.474
A 28 0.489
A 29 0.505
A 30 0.521
A 31 0.232
A 32 0.205
A 33 0.177
A 34 0.157
A 35 0.14
A 36 0.133
A 37 0.128
A 38 0.126
A 39 0.122
A 40 0.117
A 41 0.109
A 42 0.0973
A 43 0.0841
A 44 0.0706
A 45 0.0629
A 46 0.0549
A 47 0.0459
A 48 0.0369
A 49 0.0285
A 50 0.0211
A 51 0.0135
A 52 0.00663
A 53 0.839
A 54 0.848
A 55 0.857
A 56 0.864
A 57 0.872
A 58 0.878
A 59 0.885
A 60 0.885
B 0 0.000449
B 1 0.00102
B 2 0.00208
B 3 0.00352
B 4 0.00569
B 5 0.00977
B 6 0.0161
B 7 0.0208
B 8 0.0255
B 9 0.0303
B 10 0.0347
B 11 0.0392
B 12 0.0433
B 13 0.0473
B 14 0.0511
B 15 0.0538
B 16 0.0561
按第三列值的大小分成区间,比如第三列小于0.3为small,大于0.3的为big,将第二列值处理成区间模式,比如第二列0-17均小于0.3,类似地,整个就可以简化为:
A 0 17 small
A 18 30 big
A 31 52 small
A 53 60 big
B 0 16 small
解法如下:
awk -vp=0.3 '{x=($3-p>0)?"big":"small"}$1!=n||$2-e!=1||x!=s{if(n)print n,b,e,s;b=$2}{n=$1;e=$2;s=x}END{print n,b,e,s}' file