免费注册 查看新帖 |

Chinaunix

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

[文本处理] 大家都出来吧,菜鸟来问问题了 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-20 15:08 |只看该作者 |倒序浏览
12  a  4  5  6  7  
13  a  8  5  7  9
14  a  4  2  9  6
15  b  7  9  5  6
16  b  2  3  4  6
17  c  1  2  6  6
第2列有相同的元素,如果第二列元素相同,就把后面每一列分别求平均数,就是得到这样的结果,
a    (4+8+4)/3    (5+5+2)/3     (6+7+9)/3    (7+9+6)/3
b    (7+2)/2        (9+3)/2         (5+4)/2        (6+6)/2
c     1                 2                   6                 6


麻烦大家了,十分感谢!!!



这是perl的问题,


#!/usr/bin/perl
use strict;
use warnings;

my %hash;
open my $fh, "<", "data" or die $!;
while (<$fh>) {
        chomp;
        my (undef,$c2,@col)=split /\s+/;
        push @{$hash{$c2}},@col;
}
close $fh;

for my $hkey (sort keys %hash) {
        my ($i,@sum,@num)=(0);
        for my $akey (@{$hash{$hkey}}) {
                $i%=4;
                $sum[$i]+=$akey;
                $num[$i]+=1;
                $i++;
        }

        print "$hkey ".int($sum[0]/$num[0])." ".int($sum[1]/$num[1])." ".int($sum[2]/$num[2])." ".int($sum[3]/$num[3])."\n";
}


这是perl版有人给出的答案,求解释红色这段,


另请高手用awk 写下








论坛徽章:
0
2 [报告]
发表于 2012-12-20 15:15 |只看该作者
回复 1# 村口小卖部老王


    顶一下

论坛徽章:
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 [报告]
发表于 2012-12-20 15:35 |只看该作者
本帖最后由 yestreenstars 于 2012-12-20 17:28 编辑
  1. awk '{for(i=3;i<=NF;i++){a[$2,i]+=$i}b[$2]++}END{for(i in b){printf "%-2s",i;for(j=3;j<=NF;j++)printf "%-5.2f",a[i,j]/b[i];print ""}}'
复制代码
  1. [root@localhost ~]# cat i
  2. 12  a  4  5  6  7
  3. 13  a  8  5  7  9
  4. 14  a  4  2  9  6
  5. 15  b  7  9  5  6
  6. 16  b  2  3  4  6
  7. 17  c  1  2  6  6
  8. [root@localhost ~]# awk '{for(i=3;i<=NF;i++){a[$2,i]+=$i}b[$2]++}END{for(i in b){printf "%-2s",i;for(j=3;j<=NF;j++)printf "%-5.2f",a[i,j]/b[i];print ""}}' i
  9. a 5.33 4.00 7.33 7.33
  10. b 4.50 6.00 4.50 6.00
  11. c 1.00 2.00 6.00 6.00
  12. [root@localhost ~]#
复制代码

论坛徽章:
0
4 [报告]
发表于 2012-12-20 17:07 |只看该作者
回复 3# yestreenstars

这个AWK也太长了吧


   

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
5 [报告]
发表于 2012-12-20 17:12 |只看该作者
回复 3# yestreenstars


    这不是LZ的要求吧?

论坛徽章:
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
6 [报告]
发表于 2012-12-20 17:28 |只看该作者
回复 5# blackold


    多谢黑哥提醒,他贴的结果让我误会了,已更正~ ~

论坛徽章:
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 [报告]
发表于 2012-12-20 17:30 |只看该作者
回复 4# zzbutcher


    现在呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP