我有關於類別支出的客戶信息。 它與管道分隔符一樣在平面文件中。用於從.txt進行多行文本解析的Perl腳本
Jane|groceries|$30.02
Victor|entertainment|$40.57
Cedric|fuel|$10.84
Jane|fuel|$20.93
Cedric|entertainment|$75.06
我需要生成的輸出文件,說明每個客戶
我有關於類別支出的客戶信息。 它與管道分隔符一樣在平面文件中。用於從.txt進行多行文本解析的Perl腳本
Jane|groceries|$30.02
Victor|entertainment|$40.57
Cedric|fuel|$10.84
Jane|fuel|$20.93
Cedric|entertainment|$75.06
我需要生成的輸出文件,說明每個客戶
my %sum_for;
while (<>) {
chomp;
my ($name, $item, $price) = split /[|]/;
$price =~ s/^\$//;
$sum_for{$name} += $price;
}
say "$_: \$$sum_for{$_}" for sort keys %sum_for;
之後新線上嘿,非常感謝。它的工作 – user3230201
我想獲得一份報告,列出他們在每個類別中使用代碼的花費,while(
將其歸入類別只需執行'$ sum_for {$ name} {$ item} + = $ price;'this會產生哈希散列,您可以先按名稱和類別排序,例如Cedric,然後是燃料或娛樂 – Ahdee
這樣的事情可以用Perl中一個襯墊來完成花費金額。
perl -F'\|' -lane '$F[2]=~s/\$//;$d->{$F[0]}+=$F[2];END{print"$_=>\$$d->{$_}" for keys %$d;}' your_file.txt
該首先除去從$
價格標籤,然後創建哈希REF 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
做了這個帖子顯示格式你打算的方式還是這些也是行劃分的?我問的原因是因爲除非每個記錄之間的字符是唯一的(除非你假設每個記錄中的第一個字段沒有數字),否則將不可能解析該字符。 – krowe
顯示你的Perl代碼。 – toolic
是的。新客戶在金額欄 – user3230201