用于从.txt解析多行文本的Perl脚本

时间:2014-01-24 01:22:45

标签: perl delimiter multiline

我有关于类别支出的客户信息。 它在平面文件中,因为它带有管道分隔符。

Jane|groceries|$30.02
Victor|entertainment|$40.57
Cedric|fuel|$10.84
Jane|fuel|$20.93
Cedric|entertainment|$75.06

我需要生成输出文件,说明每个客户花费的金额

2 个答案:

答案 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