免费注册 查看新帖 |

Chinaunix

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

[文本处理] 统计a文本中的字段在b文本中1 2列范围内 第3列的次数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-10-30 15:42 |只看该作者 |倒序浏览
例如a文本为:
4
6
11
14
15
23
53
63
68
b文本为:
0|9|a
10|19|b
20|29|c
30|31|d
40|49|e
50|59|f
60|69|g
要统计第三列的次数,求教要怎么做

论坛徽章:
16
CU十二周年纪念徽章
日期:2013-10-24 15:41:3415-16赛季CBA联赛之广东
日期:2015-12-23 21:21:55青铜圣斗士
日期:2015-12-05 10:35:30黄金圣斗士
日期:2015-11-26 20:42:16神斗士
日期:2015-11-19 12:47:50每日论坛发贴之星
日期:2015-11-18 06:20:00程序设计版块每日发帖之星
日期:2015-11-18 06:20:002015亚冠之城南
日期:2015-11-10 19:10:492015亚冠之萨济拖拉机
日期:2015-10-28 18:47:282015亚冠之柏太阳神
日期:2015-08-30 17:21:492015亚冠之山东鲁能
日期:2015-07-07 18:48:39摩羯座
日期:2014-08-29 23:01:42
2 [报告]
发表于 2015-10-30 16:11 |只看该作者
看不懂什么意思。。。。。。。

论坛徽章:
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
3 [报告]
发表于 2015-10-30 16:21 |只看该作者
如果a文件已经排好序的话,用这个可以提高效率:
  1. awk -F '|' 'NR==FNR{a[++c]=$0;next}{if(!t)t=1;s=0;for(i=t;i<=c;i++){if(a[i]>=$1&&a[i]<=$2)s++;else{t=i;break}}print $3,s}' a b
复制代码

论坛徽章:
0
4 [报告]
发表于 2015-10-30 16:22 |只看该作者
回复 2# tc1989tc
比如a文本中第一个数为4,在0-9之间,就记字母a一次
第三个数为11,在10-19之间,就记字母b一次
就这样统计b文件第三列的次数


   

论坛徽章:
0
5 [报告]
发表于 2015-10-30 16:49 |只看该作者
回复 3# yestreenstars
谢谢大神,另
如果b文件为:
0|9|a
10|19|a
20|29|a
30|31|b
40|49|b
50|59|b
60|69|c
结果则为:
a 1
a 1
a 1
a 1
a 1
a 1
b 1
c 1
c 1
请问统计的时候能否直接把一样的合并在一起?



   

论坛徽章:
16
CU十二周年纪念徽章
日期:2013-10-24 15:41:3415-16赛季CBA联赛之广东
日期:2015-12-23 21:21:55青铜圣斗士
日期:2015-12-05 10:35:30黄金圣斗士
日期:2015-11-26 20:42:16神斗士
日期:2015-11-19 12:47:50每日论坛发贴之星
日期:2015-11-18 06:20:00程序设计版块每日发帖之星
日期:2015-11-18 06:20:002015亚冠之城南
日期:2015-11-10 19:10:492015亚冠之萨济拖拉机
日期:2015-10-28 18:47:282015亚冠之柏太阳神
日期:2015-08-30 17:21:492015亚冠之山东鲁能
日期:2015-07-07 18:48:39摩羯座
日期:2014-08-29 23:01:42
6 [报告]
发表于 2015-10-30 17:06 |只看该作者
  1. awk -F '|' 'NR==FNR{a[$0]++}{b[$1","$2]=$3}END{for (i in a){for (j in b){split(j,c,",");if (i<=c[2] && i >= c[1]){d[b[j]]++;break}}} for (i in d)print i,d[i]}' a.txt b.txt         
复制代码

论坛徽章:
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 [报告]
发表于 2015-10-30 17:13 |只看该作者
回复 5# seemvivi

试一下:
  1. awk -F '|' 'NR==FNR{a[++c]=$0;next}{if(!t)t=1;if(!b[$3]++)s[$3]=0;for(i=t;i<=c;i++){if(a[i]>=$1&&a[i]<=$2)s[$3]++;else{t=i;break}}}END{for(i in s)print i,s[i]}' a b
复制代码

论坛徽章:
0
8 [报告]
发表于 2015-10-30 17:14 |只看该作者
回复 6# tc1989tc
谢谢大神,完美解决了!

   

论坛徽章:
0
9 [报告]
发表于 2015-10-30 17:17 |只看该作者
回复 7# yestreenstars
受教了,谢谢!
   

论坛徽章:
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
10 [报告]
发表于 2015-10-30 17:56 |只看该作者
run only

$ awk 'function _0000O(_000O0,_000OO,_00O00){_00O0O=NR;_00OO0="*"*"*";_00OOO=FNR;_0O000=1;_0O000=("="=="=")+_00OO0;_0O00O=_00OO0;_0O0O0=_00O0O+_00OO0;_0O0OO=_0O000+("+"=="+")+_00OO0;_0OO00=_0O000;_0OO0O=NF;_0OOO0="""|""";_0OOOO=_00OOO+_0O00O;_O0000=_00OO0+"="=="=";}{_0000O(_0O000,_0O0OO);}_0O0O0==_0OOOO{split($_0O00O,_O000O,_0OOO0);++_O00O0;_O00OO[_O00O0"s"]=_O000O[_0O000+_0O00O];_O00OO[_O00O0"e"]=_O000O[_0OO00+_0O000];_O00OO[_O00O0"v"]=_O000O[_0O000+_0O0OO];next;}{for(_O0O00=_0O000+_0O00O;_O0O00<=_O00O0;_O0O00+=_0OO00)if(_O00OO[_O0O00"s"]<=$_0O000&&$_0OO00<=_O00OO[_O0O00"e"])_O0O0O[_O00OO[_O0O00"v"]]++;}END{for(_O0O00=_0OO00+_O0OO0;_O0O00<=_O00O0*_0OO00+_0O00O;_O0O00+=_0O000){if(!_O0OOO[_O00OO[_O0O00"v"]]++)print _O00OO[_O0O00"v"],_O0O0O[_O00OO[_O0O00"v"]]*_0O000+_00OO0;}}' b a
a 6
b 1
c 2
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP