免费注册 查看新帖 |

Chinaunix

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

[文本处理] 统计频率 [复制链接]

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-10-29 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-10-26 12:44 |只看该作者 |倒序浏览
请教各位大神,我有一个文件如下格式,我想统计每个ID下,各个因子的频率。先谢谢了
>g1
V$P53_04 287 20 306 g1_ENSRNOG00000013436_451a Yes
V$P53_04 287 20 306 g1_ENSRNOG00000013436_451a Yes
V$ZFP161_04 288 14 301 g1_ENSRNOG00000013436_451a Yes
V$ZFP161_04 290 14 303 g1_ENSRNOG00000013436_451a Yes
V$CHCH_01 292 6 297 g1_ENSRNOG00000013436_451a Yes
V$ZFP161_04 294 14 307 g1_ENSRNOG00000013436_451a Yes
V$AP2ALPHA_03 304 15 318 g1_ENSRNOG00000013436_451a Yes
V$AP2ALPHA_03 304 15 318 g1_ENSRNOG00000013436_451a Yes
V$FREAC3_01 317 16 332 g1_ENSRNOG00000013436_451a Yes

>g2
V$CREBP1_01 124 8 131 g1_ENSRNOG00000016371_102a Yes
V$CREBP1_01 124 8 131 g1_ENSRNOG00000016371_102a Yes
V$SOX2_Q3_01 144 15 158 g1_ENSRNOG00000016371_102a Yes
V$SOX10_Q3 145 8 152 g1_ENSRNOG00000016371_102a Yes
V$CDX2_01 160 16 175 g1_ENSRNOG00000016371_102a Yes

结果统计每个因子发生的频率,结果应如下

>g1
V$P53_04 2
V$ZFP161_04 2
...
>g2
V$CREBP1_01 2
V$SOX2_Q3_01 1
..

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-10-29 06:20:00
2 [报告]
发表于 2015-10-26 13:04 |只看该作者
在线等

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
3 [报告]
发表于 2015-10-26 13:09 |只看该作者
gawk 4.0+
  1. awk '/^>/{k=$0;next}NF{a[k][$1]++}END{for(i in a){print i;for(j in a[i])print j,a[i][j]}}' file
复制代码

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-10-29 06:20:00
4 [报告]
发表于 2015-10-26 13:23 |只看该作者
回复 3# reyleon


运行后,报错,不知道是哪里出了问题?

awk '/^>/{k=$0;next}NF{a[k][$1]++}END{for(i in a){print i;for(j in a)print j,a[j]}}' g2a_tf_yes
awk: syntax error at source line 1
context is
         >>> /^>/{k=$0;next}NF{a[k][ <<<
awk: illegal statement at source line 1
awk: illegal statement at source line 1



   

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-10-29 06:20:00
5 [报告]
发表于 2015-10-26 13:24 |只看该作者
回复 3# reyleon


gwak要自己安装吗

   

论坛徽章:
30
申猴
日期:2014-04-10 09:43:532015年亚洲杯纪念徽章
日期:2015-03-20 14:40:232015亚冠之阿尔纳斯尔
日期:2015-06-02 18:59:042015亚冠之阿尔希拉尔
日期:2015-06-30 15:22:572015亚冠之大阪钢巴
日期:2015-07-20 10:44:332015亚冠之阿尔纳斯尔
日期:2015-10-28 14:57:5215-16赛季CBA联赛之新疆
日期:2015-12-25 10:18:45黑曼巴
日期:2016-06-26 21:39:5315-16赛季CBA联赛之山西
日期:2016-07-25 21:54:2715-16赛季CBA联赛之北京
日期:2016-10-27 12:07:2315-16赛季CBA联赛之八一
日期:2017-07-07 16:39:0915-16赛季CBA联赛之吉林
日期:2017-09-04 12:14:43
6 [报告]
发表于 2015-10-26 13:38 |只看该作者
  1. awk -v RS=">" 'NR>1{print ">"$1;for(i=2;i<=NF;i+=6) {a[$i]++} for(i in a) {print i,a[i]} delete a;}' file            
  2. >g1
  3. V$CHCH_01 1
  4. V$ZFP161_04 3
  5. V$AP2ALPHA_03 2
  6. V$P53_04 2
  7. V$FREAC3_01 1
  8. >g2
  9. V$CDX2_01 1
  10. V$SOX2_Q3_01 1
  11. V$SOX10_Q3 1
  12. V$CREBP1_01 2
复制代码
回复 1# catloverat99


   

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-10-29 06:20:00
7 [报告]
发表于 2015-10-26 13:57 |只看该作者
回复 6# zxy877298415


    请问i+=6是什么意思?我跑了我的例子没问题,可是换了个大点的文件结果就不是我想要的了,请帮忙看看哪里出了问题? 哎,照猫画虎都不成。。。


文件的样子
>g1_ENSRNOG00000013436_451a  0 -1 g1_ENSRNOG00000013436_451a Yes
V$GFI1_Q6_01 12 10 21 g1_ENSRNOG00000013436_451a Yes
V$SMAD4_Q6_01 29 7 35 g1_ENSRNOG00000013436_451a Yes
V$GKLF_Q4 34 7 40 g1_ENSRNOG00000013436_451a Yes
V$YY1_Q6_03 37 7 43 g1_ENSRNOG00000013436_451a Yes
V$NANOG_01 48 12 59 g1_ENSRNOG00000013436_451a Yes
V$CDX2_01 63 16 78 g1_ENSRNOG00000013436_451a Yes
V$BBX_04 64 17 80 g1_ENSRNOG00000013436_451a Yes
V$BBX_04 65 17 81 g1_ENSRNOG00000013436_451a Yes
V$FREAC3_01 65 16 80 g1_ENSRNOG00000013436_451a Yes
V$AIRE_01 71 26 96 g1_ENSRNOG00000013436_451a Yes
V$TEF1_Q6_04 75 11 85 g1_ENSRNOG00000013436_451a Yes
V$IK_Q5_01 78 7 84 g1_ENSRNOG00000013436_451a Yes
V$YY1_Q6_03 79 7 85 g1_ENSRNOG00000013436_451a Yes
V$IK_Q5_01 83 7 89 g1_ENSRNOG00000013436_451a Yes
V$RFX1_01 107 17 123 g1_ENSRNOG00000013436_451a Yes
V$CHCH_01 111 6 116 g1_ENSRNOG00000013436_451a Yes
V$MYB_05 114 17 130 g1_ENSRNOG00000013436_451a Yes
V$RFX_Q6 115 9 123 g1_ENSRNOG00000013436_451a Yes
V$NANOG_01 116 12 127 g1_ENSRNOG00000013436_451a Yes
V$MYB_Q4 116 12 127 g1_ENSRNOG00000013436_451a Yes
V$CPBP_Q6 120 7 126 g1_ENSRNOG00000013436_451a Yes
V$TBX5_01 120 12 131 g1_ENSRNOG00000013436_451a Yes
V$CHCH_01 121 6 126 g1_ENSRNOG00000013436_451a Yes
V$CDX2_01 122 16 137 g1_ENSRNOG00000013436_451a Yes
V$TATA_01 127 15 141 g1_ENSRNOG00000013436_451a Yes
V$CDX2_Q5_02 128 6 133 g1_ENSRNOG00000013436_451a Yes
V$TBX5_01 129 12 140 g1_ENSRNOG00000013436_451a Yes

跑出来的结果
awk  -v RS=">" 'NR>1{print ">"$1;for(i=2;i<=NF;i+=6) {a[$i]++} for(i in a) {print i,a} delete a;}' g1a_tf_yes
>g1_ENSRNOG00000013436_451a
6 5
26 1
7 15
8 3
9 2
10 11
11 4
12 9
13 1
14 6
15 7
16 4
17 5
19 1
20 4
0 1
>g1_ENSRNOG00000016371_102a
5 2
6 19
7 50
8 47


论坛徽章:
30
申猴
日期:2014-04-10 09:43:532015年亚洲杯纪念徽章
日期:2015-03-20 14:40:232015亚冠之阿尔纳斯尔
日期:2015-06-02 18:59:042015亚冠之阿尔希拉尔
日期:2015-06-30 15:22:572015亚冠之大阪钢巴
日期:2015-07-20 10:44:332015亚冠之阿尔纳斯尔
日期:2015-10-28 14:57:5215-16赛季CBA联赛之新疆
日期:2015-12-25 10:18:45黑曼巴
日期:2016-06-26 21:39:5315-16赛季CBA联赛之山西
日期:2016-07-25 21:54:2715-16赛季CBA联赛之北京
日期:2016-10-27 12:07:2315-16赛季CBA联赛之八一
日期:2017-07-07 16:39:0915-16赛季CBA联赛之吉林
日期:2017-09-04 12:14:43
8 [报告]
发表于 2015-10-26 14:07 |只看该作者
回复 7# catloverat99
你的文件的格式都变了啊,这个文本哪个是ID?


   

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-10-29 06:20:00
9 [报告]
发表于 2015-10-26 14:07 |只看该作者
回复 8# zxy877298415

>g1_ENSRNOG00000013436_451a  0 -1 g1_ENSRNOG00000013436_451a Yes 变成>g1


   

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-10-29 06:20:00
10 [报告]
发表于 2015-10-26 14:10 |只看该作者
回复 8# zxy877298415


    因为原来的文件很长,我挑了几行,把>id换了个更短的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP