我有关于类别支出的客户信息。 它在平面文件中,因为它带有管道分隔符。
Jane|groceries|$30.02
Victor|entertainment|$40.57
Cedric|fuel|$10.84
Jane|fuel|$20.93
Cedric|entertainment|$75.06
我需要生成输出文件,说明每个客户花费的金额
答案 0 :(得分:2)
my %sum_for;
while (<>) {
chomp;
my ($name, $item, $price) = split /[|]/;
$price =~ s/^\$//;
$sum_for{$name} += $price;
}
say "$_: \$$sum_for{$_}" for sort keys %sum_for;
答案 1 :(得分:0)
这样的事情可以用perl中的一个衬垫来完成。
perl -F'\|' -lane '$F[2]=~s/\$//;$d->{$F[0]}+=$F[2];END{print"$_=>\$$d->{$_}" for keys %$d;}' your_file.txt
首先从价格标签中删除$
,然后在相同Name => Amount
时创建哈希引用Amount
,将新Amount
连续添加到现有Name
值出现。 END
告诉perl只运行一次之后出现的内容(经过所有行之后),因为它正在使用-n
选项执行代码。
输出:
Victor=>$40.57
Jane=>$50.95
Cedric=>$85.9
使用的选项:
-e
=可用于输入一行程序(一个班轮模式)-a
=启用自动分割模式,将分割值放在@F数组-F'\|'
=将分隔符设置为| -n
=导致perl假定while(<>){...}
循环您的程序-l
=启用自动行结束处理有关所用选项和可能性的更多信息:Perlrun Doc