免费注册 查看新帖 |

Chinaunix

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

[文本处理] 相关区域数据的统计 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-11-05 21:49 |只看该作者 |倒序浏览
有一个file:(tab分隔)
0.2
0.1
2
6
-1
-9

我想要以5为一个区间,看-10到10之间每个区间的总数:(tab分隔)
-10  -5   1
-5    0    1
0     5    3
5     10   1

请大神指点!!

论坛徽章:
0
2 [报告]
发表于 2014-11-05 22:18 |只看该作者
@gooderpan

awk 'BEGIN{s=-10;}{for(i=s;i<=10;i=i+5)if($1>=i&&$1<i+5)H[i" "i+5]++;}END{for(d in H)print d,H[d];}' t.txt | sort  -n

论坛徽章:
0
3 [报告]
发表于 2014-11-05 23:26 |只看该作者
请问,如果是-20到20这个区域,还是5为间隔,那么
-20  -15  0
-15   -10  0
-10  -5   1
-5    0    1
0     5    3
5     10   1
10    15   0
15    20   0
想要得到这个结果,那这个程序该怎么改下呢???回复 2# yinwei2012


   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
4 [报告]
发表于 2014-11-05 23:42 |只看该作者
本帖最后由 jason680 于 2014-11-05 23:43 编辑

回复 3# gooderpan

$ awk 'BEGIN{s=-20;e=20;v=5;FS=OFS="\t"}{a[(int($1/v)-($1<0))*v]++}END{for(n=s;n<e;n+=v)print n,n+v,a[n]?a[n]:0}' FILE
-20        -15        0
-15        -10        0
-10        -5        1
-5        0        1
0        5        3
5        10        1
10        15        0
15        20        0

   

论坛徽章:
0
5 [报告]
发表于 2014-11-06 00:12 |只看该作者
请问,a[(int($1/v)-($1<0))*v]++ 这句是什么意思咧??回复 4# jason680


   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
6 [报告]
发表于 2014-11-06 00:31 |只看该作者
本帖最后由 jason680 于 2014-11-06 00:33 编辑

回复 5# gooderpan

1. to get the group value
v=5
value($1) => group
0.2 => 0~5
0.1 => 0~5
2   => 0~5
6   => 5~10
-1  => -5~0
-9  => -10~-5

group=(int($1/v)-($1<0))*v

2. using array to count the same group
a[ group ]++  

3. combine step 1 and 2
a[ (int($1/v)-($1<0))*v ]++

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
7 [报告]
发表于 2014-11-06 09:20 |只看该作者
请问临界点如何处理?

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
8 [报告]
发表于 2014-11-06 09:25 |只看该作者
  1. [root@localhost ~]# awk 'BEGIN{start=-10;end=10;step=5}{for(i=start;i<end;i+=step)if($0>=i&&$0<(i+5)){a[i]++;break}}END{for(i=start;i<end;i+=step)printf "%d\t%d\t%d\n",i,i+5,a[i]}' i
  2. -10        -5        1
  3. -5        0        1
  4. 0        5        3
  5. 5        10        1
  6. [root@localhost ~]#
复制代码

论坛徽章:
0
9 [报告]
发表于 2014-11-06 09:39 |只看该作者
谢谢,理解啦!回复 6# jason680


   

论坛徽章:
0
10 [报告]
发表于 2014-11-06 14:04 |只看该作者
本帖最后由 yinwei2012 于 2014-11-06 14:57 编辑

@gooderpan

awk '{t=$1;$1=int($1);for(i=$1;i%5!=0;i++);if(t>0&&t<5)b[0"\t"5]++;else if(t<0&&t>-5)b[-5"\t"0]++;else b[i-5"\t"i]++;}END{for(d in b)print d"\t"b[d];}'  t.txt | sort -n
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP