免费注册 查看新帖 |

Chinaunix

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

请教Perl哈希: [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-04-03 11:28 |只看该作者 |倒序浏览
请问是否可以使用哈希将以下数据中A、B物质(substance)的三个浓度(concentration)分别加起来?
substance              concentration
A                           12
A                           11
A                           15
B                           23
B                           21
B                           26
初学Perl,请求大神赐教代码

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
2 [报告]
发表于 2016-04-03 11:49 |只看该作者
回复 1# Azar92
  1. perl -alne '{$h{$F[0]}+=$F[-1]}END{print "$_ => $h{$_}" for keys %h}' ur.txt
复制代码

论坛徽章:
0
3 [报告]
发表于 2016-04-03 12:49 |只看该作者
谢谢帮助指导 ,可我运行程序后在"}END"处报错啦
我输入的代码是(见识不够,还没看懂代码,是直接的copy):
    perl -alne {$h{$F[0]}+=$F[-1]}END{print "$_ => $h{$_}" for keys %h}
        __DATA__
substance              concentration
A                           12
A                           11
A                           15
B                           23
B                           21
B                           26
大神能否帮我再debug一下呀
回复 2# sunzhiguolu


   

论坛徽章:
0
4 [报告]
发表于 2016-04-03 12:55 |只看该作者
思考了一下,我需要先把我的数据放到数组F里么?回复 2# sunzhiguolu


   

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-06-12 06:20:00
5 [报告]
发表于 2016-04-03 12:58 |只看该作者
awk "{ arr[$1]=arr[$1]+$2 } END { for( key in arr) { print key , arr[key] } } "  data.txt

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
6 [报告]
发表于 2016-04-03 13:07 |只看该作者
回复 3# Azar92
你的环境是?

   

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
7 [报告]
发表于 2016-04-03 13:11 |只看该作者
本帖最后由 sunzhiguolu 于 2016-04-03 13:12 编辑

回复 4# Azar92
用这个吧, 比较稳妥一点.
perl abc ur.txt

  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my %hData;
  5. while (<>){
  6.         my ($sK, $sV) = split;
  7.         $hData{$sK} += $sV;
  8. }

  9. foreach (keys %hData){
  10.         print "$_ => $hData{$_}\n";
  11. }
复制代码

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
8 [报告]
发表于 2016-04-03 13:16 |只看该作者
回复 4# Azar92
看下这个, Jason680 大神提供的.
http://highdb.com/perl-one-line-command-%E4%BB%8B%E7%BB%8D/

   

论坛徽章:
0
9 [报告]
发表于 2016-04-03 13:19 |只看该作者
我是在Windows里运行的代码。我看得懂这个,谢谢大神,问题解决啦啦啦,谢谢谢谢
很想知道你给我的第一个代码是Unix里用的么  
回复 7# sunzhiguolu


   

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
10 [报告]
发表于 2016-04-03 13:25 |只看该作者
本帖最后由 sunzhiguolu 于 2016-04-03 13:28 编辑

回复 9# Azar92
Windows 下安装 Cygwin, 在 Windows 环境中用 perl one line command 有好多问题.
感兴趣的话, 看下 => http://www.cygwin.cn/
这个也是 Jason680 大神提醒的, 哈哈我也是受益者!
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP