Chinaunix
标题:
请教Perl哈希:
[打印本页]
作者:
Azar92
时间:
2016-04-03 11:28
标题:
请教Perl哈希:
请问是否可以使用哈希将以下数据中A、B物质(substance)的三个浓度(concentration)分别加起来?
substance concentration
A 12
A 11
A 15
B 23
B 21
B 26
初学Perl,请求大神赐教代码
作者:
sunzhiguolu
时间:
2016-04-03 11:49
回复
1#
Azar92
perl -alne '{$h{$F[0]}+=$F[-1]}END{print "$_ => $h{$_}" for keys %h}' ur.txt
复制代码
作者:
Azar92
时间:
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
作者:
Azar92
时间:
2016-04-03 12:55
思考了一下,我需要先把我的数据放到数组F里么?
回复
2#
sunzhiguolu
作者:
yakczh_cu
时间:
2016-04-03 12:58
awk "{ arr[$1]=arr[$1]+$2 } END { for( key in arr) { print key , arr[key] } } " data.txt
作者:
sunzhiguolu
时间:
2016-04-03 13:07
回复
3#
Azar92
你的环境是?
作者:
sunzhiguolu
时间:
2016-04-03 13:11
本帖最后由 sunzhiguolu 于 2016-04-03 13:12 编辑
回复
4#
Azar92
用这个吧, 比较稳妥一点.
perl abc ur.txt
#!/usr/bin/perl
use strict;
use warnings;
my %hData;
while (<>){
my ($sK, $sV) = split;
$hData{$sK} += $sV;
}
foreach (keys %hData){
print "$_ => $hData{$_}\n";
}
复制代码
作者:
sunzhiguolu
时间:
2016-04-03 13:16
回复
4#
Azar92
看下这个,
Jason680
大神提供的.
http://highdb.com/perl-one-line-command-%E4%BB%8B%E7%BB%8D/
作者:
Azar92
时间:
2016-04-03 13:19
我是在Windows里运行的代码。我看得懂这个,谢谢大神,问题解决啦啦啦,谢谢谢谢
很想知道你给我的第一个代码是Unix里用的么
回复
7#
sunzhiguolu
作者:
sunzhiguolu
时间:
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
大神提醒的, 哈哈我也是受益者!
作者:
Azar92
时间:
2016-04-03 13:34
好的好的,受教了,多谢指点,多谢代码
回复
10#
sunzhiguolu
作者:
Azar92
时间:
2016-04-03 13:40
好的好的,慢慢来学习Perl,非常感谢你的指导和代码
,谢谢!
回复
10#
sunzhiguolu
作者:
Eva326
时间:
2016-10-02 21:43
#!/usr/bin/perl -w
use strict;
open (IN, "<1.txt") or die $!;
my %hash;
while(<IN>){
chomp;
my ($ID, $value) = split;
next unless $value =~ /[0-9]/;
$hash{$ID} += $value;
}
foreach (keys %hash){
print "$_\t$hash{$_}\n";
}
复制代码
#!/usr/bin/perl -w
use strict;
open (IN, "<1.txt") or die $!;
readline IN;
my %hash;
while(<IN>){
chomp;
my ($ID, $value) = split;
$hash{$ID} += $value;
}
foreach (keys %hash){
print "$_\t$hash{$_}\n";
}
复制代码
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2