免费注册 查看新帖 |

Chinaunix

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

[文本处理] 利用awk分类统计做count [复制链接]

论坛徽章:
1
15-16赛季CBA联赛之上海
日期:2016-11-10 11:34:28
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-01-04 09:38 |只看该作者 |倒序浏览
原始数据
name    date    nature
tom        2013-04    1
tom        2013-04    2
tom        2013-04    3
tom        2014-04    2
tom        2016-04    3
jack    2013-04    1
jack    2013-06    1
jack    2015-04    2
jack    2013-11    2
jack    2011-09    3
jine    2012-12    2
jine    2012-12    1
jine    2012-12    3
jine    2012-12    3
结果数据
name count_1    count_2    count_3
tom        1        2            2
jack    2        2            1
jine    1        1            2

利用AWK原始数据>>>>>结果数据
求指导

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
2 [报告]
发表于 2017-01-04 09:53 |只看该作者
本帖最后由 moperyblue 于 2017-01-04 10:25 编辑

more file
  1. name    date    nature
  2. tom        2013-04    1
  3. tom        2013-04    2
  4. tom        2013-04    3
  5. tom        2014-04    2
  6. tom        2016-04    3
  7. jack    2013-04    1
  8. jack    2013-06    1
  9. jack    2015-04    2
  10. jack    2013-11    2
  11. jack    2011-09    3
  12. jine    2012-12    2
  13. jine    2012-12    1
  14. jine    2012-12    3
  15. jine    2012-12    3
复制代码
  1. awk 'BEGIN{print "name count_1 count_2 count_3"}NR>1{a[$1,$3]++;if(!b[$1]++){d[++c]=$1}}END{while(i++<c){printf d[i] FS;for(j=0;j++<3;)printf a[d[i],j] (j<3?FS:RS)}}' file|column -t
复制代码

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-12-17 06:20:00
3 [报告]
发表于 2017-01-04 10:15 |只看该作者
awk 'BEGIN{print "name count_1 count_2 count_3"} {arr[$1]++;arr_c[$1,$3]++} END{for (i in arr) print i ,arr_c[i,1],arr_c[i,2],arr_c[i,3]  }' yourfile

论坛徽章:
6
羊年新春福章
日期:2015-03-03 17:16:28双子座
日期:2015-03-03 17:16:56巳蛇
日期:2015-03-03 17:17:2415-16赛季CBA联赛之福建
日期:2016-03-11 09:05:00黑曼巴
日期:2016-07-07 16:58:1215-16赛季CBA联赛之吉林
日期:2016-11-14 09:23:07
4 [报告]
发表于 2017-01-04 10:32 |只看该作者
  1. awk 'BEGIN{print "name count_1 count_2 count_3"}NR>1{a[$1];b[$1" "$3]++}END{for(i in a)print i,b[i" "1],b[i" "2],b[i" "3]}' file |column -t
复制代码

论坛徽章:
1
15-16赛季CBA联赛之上海
日期:2016-11-10 11:34:28
5 [报告]
发表于 2017-01-05 09:18 |只看该作者
回复 2# moperyblue
昨天发I型安一个问题,如果添加一个记录 ,ming ming    2016-11    A    2
最后的结果会和下面一样吗?
原始数据
tom    2013-04    A    1
tom    2013-04    A    2
tom    2013-04    S    3
tom    2014-04    D    2
tom    2016-04    F    3
jack    2013-04    S    1
jack    2013-06    A    1
jack    2015-04    Z    2
jack    2013-11    S    2
jack    2011-09    X    3
jine    2012-12    D    2
jine    2012-12    W    1
jine    2012-12    A    3
jine    2012-12    D    3
ming    2016-11    A    2
结果数据
my_name    count1    count2    count3
jack    2    2    1
jine    1    1    2
tom     1    2    2
ming    0    1    0

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
6 [报告]
发表于 2017-01-05 09:28 |只看该作者
本帖最后由 moperyblue 于 2017-01-05 09:55 编辑

回复 5# DDkalin
more file
  1. tom    2013-04    A    1
  2. tom    2013-04    A    2
  3. tom    2013-04    S    3
  4. tom    2014-04    D    2
  5. tom    2016-04    F    3
  6. jack    2013-04    S    1
  7. jack    2013-06    A    1
  8. jack    2015-04    Z    2
  9. jack    2013-11    S    2
  10. jack    2011-09    X    3
  11. jine    2012-12    D    2
  12. jine    2012-12    W    1
  13. jine    2012-12    A    3
  14. jine    2012-12    D    3
  15. ming    2016-11    A    2
复制代码

  1. awk 'BEGIN{print "name count_1 count_2 count_3"}{a[$1,$NF]++;if(!b[$1]++){d[++c]=$1}}END{while(i++<c){printf d[i] FS;for(j=0;j++<3;)printf (a[d[i],j]?a[d[i],j]:0) (j<3?FS:RS)}}' file|column -t
复制代码


#如果name不需按先后顺序
  1. awk 'BEGIN{print "name count_1 count_2 count_3"}{a[$1,$NF]++;b[$1]}END{for(i in b){printf i FS;for(j=0;j++<3;)printf (a[i,j]?a[i,j]:0) (j<3?FS:RS)}}' file|column -t
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP