按数据的区间进行处理

来源:互联网 发布:mac下载文件怎么处理 编辑:程序博客网 时间:2024/05/05 21:29

file文件数据内容如下所示:


A  0   0.00521A  1   0.0111A  2   0.0173A  3   0.0281A  4   0.0423A  5   0.0606A  6   0.0938A  7   0.128A  8   0.159A  9   0.174A  10  0.183A  11  0.19A  12  0.2A  13  0.216A  14  0.236A  15  0.257A  16  0.276A  17  0.292A  18  0.309A  19  0.327A  20  0.342A  21  0.36A  22  0.375A  23  0.392A  24  0.413A  25  0.434A  26  0.454A  27  0.474A  28  0.489A  29  0.505A  30  0.521A  31  0.232A  32  0.205A  33  0.177A  34  0.157A  35  0.14A  36  0.133A  37  0.128A  38  0.126A  39  0.122A  40  0.117A  41  0.109A  42  0.0973A  43  0.0841A  44  0.0706A  45  0.0629A  46  0.0549A  47  0.0459A  48  0.0369A  49  0.0285A  50  0.0211A  51  0.0135A  52  0.00663A  53  0.839A  54  0.848A  55  0.857A  56  0.864A  57  0.872A  58  0.878A  59  0.885A  60  0.885B  0   0.000449B  1   0.00102B  2   0.00208B  3   0.00352B  4   0.00569B  5   0.00977B  6   0.0161B  7   0.0208B  8   0.0255B  9   0.0303B  10  0.0347B  11  0.0392B  12  0.0433B  13  0.0473B  14  0.0511B  15  0.0538B  16  0.0561

按第三列值的大小分成区间,比如第三列小于0.3为small,大于0.3的为big,将第二列值处理成区间模式,比如第二列0-17均小于0.3,类似地,整个就可以简化为:

A  0   17  smallA  18  30  bigA  31  52  smallA  53  60  bigB  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


原创粉丝点击